azure-devops - 触发 Azure DevOps 发布定义的多个主要项目
问题描述
我们在 Azure DevOps 中有我们的发布定义,其中包含多个工件来源。其中一个工件是构建工件,第二个是 azure repos Git。
只要有可用的新工件(构建工件或 azure git repos 工件),是否可以触发发布?这在 Azure DevOps 中是否可行。
解决方案
只要有可用的新工件(构建工件或 azure git repos 工件),是否可以触发发布?这在 Azure DevOps 中是否可行。
任何不便敬请谅解。
构建/发布定义当前仅支持单个触发器。
作为解决方法,您可以将其设置Azure Repos Git artifact
为主要项目以触发 Azure DevOps 发布定义。
对于构建工件,我们可以通过REST API从任一构建定义中的构建任务触发发布定义。
查看这张票以获取更多详细信息。
更新:
详细说明如何使用构建管道中的 Rest API 触发器发布。
正如我上面回答的,我们可以使用 Rest API Releases - Update Release来触发发布:
PATCH https://vsrm.dev.azure.com/{organization}/{project}/_apis/Release/releases/{releaseId}/environments/{environmentId}?api-version=5.1-preview.6
当您打开发布管道,然后切换到日志选项卡时,您可以获得releaseId
和environmentId
然后,我们在构建管道Inline Powershell
中添加一个任务来调用 API 来触发发布。脚本如下:
$url = "https://vsrm.dev.azure.com/<OrganizationName>/<ProjectName>/_apis/Release/releases/285/environments/370?api-version=5.1-preview.6"
$connectionToken="Your PAT Here"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$headers = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
$body=@"
{
"status":"inProgress",
"scheduledDeploymentTime":null,
"comment":""
}
"@
Write-Host "$url"
$response= Invoke-RestMethod -Uri $url -ContentType "application/json" -Body $body -headers @{authorization = "Basic $base64AuthInfo"} -Method PATCH
如果您执行此构建管道,它将触发发布管道。
作为测试,它在我这边运行良好。
笔记:
当您使用上述脚本时,您需要进入代理阶段并选择允许脚本访问 OAuth 令牌。请参阅使用 OAuth 令牌访问 REST API
更新2:
Powershell 脚本可以工作,但它会下载旧的构建工件。但是,我们需要将发布与最新的构建工件相关联,这如何实现?
您可以使用另一个 REST API 来获取最新的 Release ID 和environmentId
:
我们可以得到所有的 Release ID definitionId
:
"isDeleted": false,
"lastRelease": {
"id": 285,
"name": "xxxxxx",
"artifacts": [],
"_links": {},
然后使用Select-Object -first 1
获取最新的 Release ID。
接下来,我们可以使用另一个 API Releases - Get Release with releaseId
,我们通过上面的 Rest API 获得,我们可以获得environmentId
:
GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1
输出如下:
"environments": [
{
"id": 370,
"releaseId": 285,
"name": "Dev",
"status": "succeeded",
"variables": {
现在,我们获得了最新的发布 ID,我们可以使用第一个 REST API 来触发发布。
希望这可以帮助。
推荐阅读
- excel - 如何在 Excel 中计算平均 ID
- python - 如何将来自scrapy的所有链接添加到列表中?
- java - Recycler view没有retrivie照片,名称和状态,如何解决?
- java - 我怎样才能让这个 for 循环只打印素数?
- python - Pyspark:特征工程师时间点指标
- mysql - 得到了orders和order_products表。订单总价应该存储在orders表中,还是根据产品数量和价格计算
- tfs - TFS 2013 MS 构建错误告诉“RegisterAssembly”任务意外失败。System.Runtime.Remoting.RemotingException 已断开连接
- python-poetry - 用 pyproject.toml 替换 Manifest.in
- clojure - 将 clojure 包部署到 clojar
- javascript - 在执行下一个函数之前等待 for 循环完成