我有流水线A,它在开发分支上成功构建时触发流水线B。我想使用下面的命令获取在开发分支上运行的管道A构建的提交ID,但它没有给我确切的id
- bash: |
COMMAND="$(echo '$(build.sourceversion)' | cut -c-7)"
echo "##vso[task.setvariable variable=dockertag]$COMMAND"
displayName: GetCommitID如果我遗漏了什么,你能给我提个建议吗?提前谢谢。
发布于 2020-11-10 16:23:55
根据我的测试,尽管流水线B由流水线A触发,但流水线A不能直接将提交id传递给流水线B。
因此,变量build.sourceversion将不会显示正确的提交ID。
要解决这个问题,您可以添加一个powershell任务,以便在管道A中的Update the Pipeline B definition中运行Rest Api。
下面是一个示例:
在管道B中设置变量

管道A:
......
steps:
.....
- powershell: |
$token = "PAT"
$url="https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/build/definitions/{PipelineBDefinitionId}?api-version=6.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$response.variables.test.value = "$(Build.SourceVersion)"
echo $response.variables.test.value
$updateurl = "https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/build/definitions/{PipelineBDefinitionId}?api-version=6.0"
$json = @($response) | ConvertTo-Json -Depth 99
$updatedef = Invoke-RestMethod -Uri $updateurl -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Basic $token"}
displayName: 'PowerShell Script'流水线B:$(test)可以显示完整的提交id。
steps:
- powershell: |
$COMMAND="$(echo '$(test)' | cut -c-7)"
echo "##vso[task.setvariable variable=dockertag]$COMMAND"
displayName: 'PowerShell Script'
- powershell: 'echo $(dockertag)'
displayName: 'PowerShell Script'结果:

发布于 2021-01-26 17:44:50
如果使用管道资源作为触发器,还可以直接引用提交id。请参阅文档:https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#pipeline-resource
resources.pipeline.<Alias>.projectName
resources.pipeline.<Alias>.projectID
resources.pipeline.<Alias>.pipelineName
resources.pipeline.<Alias>.pipelineID
resources.pipeline.<Alias>.runName
resources.pipeline.<Alias>.runID
resources.pipeline.<Alias>.runURI
resources.pipeline.<Alias>.sourceBranch
resources.pipeline.<Alias>.sourceCommit
resources.pipeline.<Alias>.sourceProvider
resources.pipeline.<Alias>.requestedFor
resources.pipeline.<Alias>.requestedForID这有意义吗?
https://stackoverflow.com/questions/64754735
复制相似问题