You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:45:32