只要有可用的新工件(构建工件或 azure git repos 工件),是否可以触发发布?这在 Azure DevOps 中是否可行。
抱歉给您带来不便。
构建/发布定义目前仅支持单个触发器。
作为解决方法,您可以将 Azure Repos Git artifact 设置为 primary 工件以触发 Azure DevOps 发布定义。
对于构建工件,我们可以通过REST API 从任一构建定义中的构建任务触发发布定义。
查看this ticket了解更多详情。
更新:
详细说明如何使用构建管道中的 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 令牌。见Use the OAuth token to access the REST API
更新2:
Powershell 脚本可以工作,但它会下载旧的构建工件。
但是,我们需要将发布与最新的构建工件相关联,
这如何实现?
您可以使用另一个 REST API 来获取最新的 Release ID 和 environmentId:
Definitions - Get
我们可以获得definitionId的所有Release ID:
"isDeleted": false,
"lastRelease": {
"id": 285,
"name": "xxxxxx",
"artifacts": [],
"_links": {},
然后使用Select-Object -first 1 获取最新的Release ID。
接下来,我们可以使用另一个 API Releases - Get Release 和 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 来触发发布。
希望这会有所帮助。