在 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
我有一个 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