首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从触发的管道构建中获取触发管道的提交id

从触发的管道构建中获取触发管道的提交id
EN

Stack Overflow用户
提问于 2020-11-09 23:42:13
回答 2查看 265关注 0票数 0

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

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

如果我遗漏了什么,你能给我提个建议吗?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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:

代码语言:javascript
复制
......
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。

代码语言:javascript
复制
steps:
- powershell: |
   $COMMAND="$(echo '$(test)' | cut -c-7)"
   echo "##vso[task.setvariable variable=dockertag]$COMMAND"
  displayName: 'PowerShell Script'

- powershell: 'echo $(dockertag)'
  displayName: 'PowerShell Script'

结果:

票数 0
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
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

这有意义吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64754735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档