git - 从发布(CD)管道触发构建(CI)管道?
问题描述
我知道从发布管道触发构建管道是非常规的,但就我而言,这是我的需要。在 Azure DevOps 中,我有一个触发发布管道的构建管道,然后在我的发布中完成所有阶段后,我想触发另一个构建管道。该构建管道将负责更新我的 git 存储库中的 json 文件。为了能够访问 git 存储库并进行更改/提交,我需要使用构建管道。我有一个解决方法,可以在发布管道中克隆 git repo 并进行更新,但这并不“感觉正确”。我希望能找到更好的解决方案。
注意:在 git commit 消息中,我将拥有[skip ci]
,因此不会有触发器或管道的无限循环......
解决方案
最简单的方法是尝试这些 3rd 方任务中的任何一个,它可以让您从发布中调用构建管道。但我不能保证任何。
如果你有像我这样的信任问题 :) 你可以使用 DevOps REST.API 来触发你的构建管道。
基本上,您需要发出 POST 请求来触发管道:
POST https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=6.0
为此,您可以使用作为发布管道中最后一步添加的 PowerShell 任务。
此外,请记住在“在代理上运行”任务的“附加选项”下设置 OAuth 令牌访问权限。
此外,您尝试触发的构建管道应该为您的构建服务授予“队列构建”权限。
这是一个类似的脚本,您应该可以重用它:
$alias = "$(Release.TriggeringArtifact.Alias)"
$buildIdKey = "RELEASE_ARTIFACTS_" + $alias + "_BUILDID"
$buildId = (Get-item env:$buildIdKey).Value
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds?api-version=6.1-preview.6"
Write-Host "URL: $url"
$authHeader = "Bearer $(System.AccessToken)"
$requestHeader = @{
"Authorization" = $authHeader
"Accept" = "application/json"
}
$requestBody = '{
"definition": {
"id": ' + $buildId + '
}
}'
$pipeline = Invoke-RestMethod -Method 'Post' -Uri $url -ContentType "application/json" -Headers $requestHeader -Body $requestBody
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
推荐阅读
- python - 如何在 2 个数据帧的 3 列中找到最接近的值?
- html - 使用 :after 选择性进行内联样式设置
- javascript - Why is this template not working correctly?
- r - XGBoost 的折叠规范不正确
- azure - 使用来自不同订阅的 Azure AD 的 Azure 应用服务
- c - 试图从标准中理解有符号整数转换规则
- react-native - 简单的 ExpoKit 项目不能在 iOS 或 Android 上运行
- c# - 有没有办法绘制内存成本较低的轨迹?
- cuda - CUDA,复制到共享内存会显着增加使用的寄存器数量
- android - Android -> 音频视频与主视频声音合并,保持音频较低的音量