Azure devops 从触发的管道生成获取触发管道的提交id

Azure devops 从触发的管道生成获取触发管道的提交id,azure-devops,Azure Devops,我有一个管道A,它在开发分支上成功构建后触发管道B。我想使用下面的命令获取在开发分支上运行的管道A构建的提交ID,但它没有给我确切的ID - bash: | COMMAND="$(echo '$(build.sourceversion)' | cut -c-7)" echo "##vso[task.setvariable variable=dockertag]$COMMAND" displayNam

我有一个管道A,它在开发分支上成功构建后触发管道B。我想使用下面的命令获取在开发分支上运行的管道A构建的提交ID,但它没有给我确切的ID

 - bash: |
          COMMAND="$(echo '$(build.sourceversion)' | cut -c-7)"
          echo "##vso[task.setvariable variable=dockertag]$COMMAND"
        displayName: GetCommitID

如果我遗漏了什么,你能建议一下吗。提前感谢。

根据我的测试,虽然管道B是由管道A触发的,但管道A不能直接将提交id传递给管道B

因此变量
build.sourceversion
将不会显示正确的提交ID

要解决此问题,可以在管道a中添加powershell任务以运行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:
$(测试)
可以显示完整的提交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'
结果:


如果使用管道资源作为触发器,还可以直接引用提交id。请参阅文档:

resources.pipeline..projectName
资源.管道..项目
resources.pipeline..pipelineName
resources.pipeline..pipelineID
resources.pipeline..runName
resources.pipeline..runID
resources.pipeline..runURI
resources.pipeline..sourceBranch
resources.pipeline..sourceCommit
resources.pipeline..sourceProvider
resources.pipeline..requestedFor
resources.pipeline..requestedForID

这有意义吗?

Hi@ramesh reddy。这张票有更新吗?如果答案能给你一些帮助,请随时告诉我。只是提醒一下。谢谢。它起作用了
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