Azure Pipeline单部署YAML中SSH与ARM服务连接兼容问题解决
解决Azure DevOps YAML管道同时使用SSH与ARM服务连接的类型不匹配错误
错误原因
你当前的问题是用同一个参数serviceconnection同时给SSH任务和ARM任务传递服务连接,但Azure DevOps对服务连接的类型有严格校验:
CopyFilesOverSSH@0任务要求sshEndpoint必须是SSH类型的服务连接AzureCLI@2任务要求azureSubscription必须是Azure Resource Manager(ARM)类型的服务连接
同一个参数无法同时满足两种类型要求,因此触发类型不匹配错误。
解决方案
需要在管道中定义两个独立的参数,分别对应SSH服务连接和ARM服务连接,然后在对应任务中使用各自的参数。
步骤1:添加两个服务连接参数
在YAML的参数定义部分,新增两个参数,分别指定对应的服务连接类型:
parameters: - name: sshServiceConnection type: serviceconnection connectionType: ssh displayName: "SSH类型服务连接" - name: armServiceConnection type: serviceconnection connectionType: azurerm displayName: "ARM类型服务连接"
步骤2:修改任务中的服务连接引用
将原任务中的${{ parameters.serviceconnection }}替换为对应的新参数:
- SSH任务使用
sshServiceConnection - AzureCLI任务使用
armServiceConnection
修改后的完整YAML示例
parameters: - name: sshServiceConnection type: serviceconnection connectionType: ssh displayName: "SSH类型服务连接" - name: armServiceConnection type: serviceconnection connectionType: azurerm displayName: "ARM类型服务连接" jobs: - deployment: deploy_files # 保留原有deployment配置(环境、策略等) environment: your-environment strategy: runOnce: deploy: steps: # Copy files over SSH - task: CopyFilesOverSSH@0 inputs: sshEndpoint: '${{ parameters.sshServiceConnection }}' sourceFolder: '$(build.ArtifactStagingDirectory)/c.../' contents: | comm*** displayName: 'Copy common over SSH' - task: CopyFilesOverSSH@0 inputs: sshEndpoint: '${{ parameters.sshServiceConnection }}' sourceFolder: '$(build.ArtifactStagingDirectory)/cc....' contents: '**' displayName: 'Copy files over SSH' - task: CopyFilesOverSSH@0 inputs: sshEndpoint: '${{ parameters.sshServiceConnection }}' sourceFolder: '$(build.ArtifactStagingDirectory)/ccp....' contents: '**' displayName: 'Update the file permission' ##Copy Files to ADLS - task: AzureCLI@2 inputs: azureSubscription: '${{ parameters.armServiceConnection }}' scriptType: bash scriptLocation: inlineScript inlineScript: | # 你的CLI脚本内容 displayName: 'Azure CLI to copy files to Azure Blob storage' - task: AzureCLI@2 inputs: azureSubscription: '${{ parameters.armServiceConnection }}' scriptType: bash scriptLocation: inlineScript inlineScript: | Fil.... displayName: 'Delete files from Azure Blob storage'
额外说明
通过分开定义参数并指定connectionType,Azure DevOps会在管道运行前校验服务连接类型是否匹配对应任务的要求,避免出现类型不兼容的错误。同时,在管道触发时,用户可以直观地选择对应的两种服务连接。
内容的提问来源于stack exchange,提问作者Izzy
相关产品推荐
相关产品推荐

