在 CD 管道中检出 CI 提交 ID,由 Azure DevOps 中的 CI 触发

Checkout CI commit id in CD pipeline, triggered by CI in Azure DevOps

我有一个 CI 和 CD 管道 - 都是 .yaml 文件,运行 在 Azure DevOps 中。

CD 管道在 CI 管道完成时触发:

resources:
  pipelines:
    - pipeline: ci
      source: "MyProject - CI"
      trigger:
        branches:
          include:
            - main
            - develop

在 CD 管道中,我也应该可以访问源代码,这可以通过使用 Checkout 任务来实现。

但是,此任务始终采用最新版本的源,而不是触发 CI 管道的源。

有什么方法可以访问 CI 的提交 ID,并使用该版本进行签出吗?

您可以在构建中使用 rest api 和 powershell。例如,您可以使用 Build.TriggeredBy.BuildId 来获取先前构建的评论信息:

$token = "$(System.AccessToken)" 

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$orgUrl = "$(System.CollectionUri)"
$teamProject = "$(System.TeamProject)"

$buildId = '$(Build.TriggeredBy.BuildId)'

$restGetBuild = "$orgUrl/$teamProject/_apis/build/builds/$buildId`?api-version=6.0"

function InvokeGetRequest ($GetUrl)
{    
    return Invoke-RestMethod -Uri $GetUrl -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
}


$result = InvokeGetRequest $restGetBuild

$commit = $result.sourceVersion

& git checkout $commit