首页 > 解决方案 > 触发 Azure DevOps 发布定义的多个主要项目

问题描述

在此处输入图像描述我们在 Azure DevOps 中有我们的发布定义,其中包含多个工件来源。其中一个工件是构建工件,第二个是 azure repos Git。

只要有可用的新工件(构建工件或 azure git repos 工件),是否可以触发发布?这在 Azure DevOps 中是否可行。

标签: 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

当您打开发布管道,然后切换到日志选项卡时,您可以获得releaseIdenvironmentId

在此处输入图像描述

然后,我们在构建管道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 来触发发布。

希望这可以帮助。


推荐阅读