Azure Pipeline:如何创建流水线间线性依赖并传递参数?
实现Azure Pipeline的依赖触发与参数传递
以下两种方案可以同时实现流水线的依赖触发和参数传递:
方案一:Pipeline资源+变量组传递参数
1. 配置第二个流水线的触发依赖
在第二个流水线的YAML中添加Pipeline资源,关联第一个流水线并启用自动触发:
resources: pipelines: - pipeline: FirstPipeline source: '第一个流水线的名称' project: '你的Azure DevOps项目名称' trigger: branches: include: - main # 按需指定触发的分支
配置后,第一个流水线在指定分支上完成运行时,会自动触发第二个流水线。
2. 第一个流水线将生成的ID存入变量组
在第一个流水线的作业中,添加任务将生成的ID写入预先创建好的变量组:
- task: AzureCLI@2 inputs: azureSubscription: '你的Azure订阅连接' scriptType: 'bash' inlineScript: | # 替换为你的变量组ID、组织URL、项目名称和生成的ID变量 az pipelines variable-group variable update --group-id 123 --name GeneratedID --value "$(YourGeneratedID)" --org https://dev.azure.com/your-org/ --project "your-project"
注意:需要给流水线的服务主体分配该变量组的编辑权限。
3. 第二个流水线读取变量组中的参数
在第二个流水线中引用目标变量组,直接使用存储的ID参数:
variables: - group: 你的变量组名称 steps: - script: echo "从第一个流水线接收的ID: $(GeneratedID)"
方案二:通过REST API触发并传递参数
1. 为第二个流水线定义可接收的参数
在第二个流水线的YAML开头声明参数,用于接收第一个流水线传入的ID:
parameters: - name: TargetID type: string displayName: '第一个流水线生成的ID' default: '' steps: - script: echo "接收到的ID: ${{ parameters.TargetID }}"
2. 第一个流水线调用API触发第二个流水线并传参
在第一个流水线的最后一个作业中,添加PowerShell任务,调用Azure DevOps REST API触发第二个流水线,并携带生成的ID:
- task: PowerShell@2 inputs: inlineScript: | $orgUrl = "https://dev.azure.com/your-org" $projectName = "your-project" $pipelineId = 456 # 替换为第二个流水线的ID $authToken = "$(System.AccessToken)" $base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$authToken")) # 构造请求体,传递参数 $requestBody = @{ templateParameters = @{ TargetID = "$(YourGeneratedID)" # 替换为第一个流水线生成的ID变量 } } | ConvertTo-Json $apiUrl = "$orgUrl/$projectName/_apis/pipelines/$pipelineId/runs?api-version=7.1-preview.1" $response = Invoke-RestMethod -Uri $apiUrl -Method Post -Headers @{Authorization=("Basic {0}" -f $base64Auth)} -Body $requestBody -ContentType "application/json" Write-Host "已触发第二个流水线,运行ID: $($response.id)"
注意:需要给流水线的服务主体分配第二个流水线的排队构建权限。
方案对比
- 方案一适合需要持久化参数、多个流水线共享参数的场景,参数存储在变量组中可重复使用。
- 方案二更直接,参数实时传递,无需依赖外部存储,适合一次性传递的场景。
内容的提问来源于stack exchange,提问作者Sumi
相关产品推荐
相关产品推荐

