我们在Azure DevOps中具有多个工件来源的发布定义。其中一个工件是构建工件,第二个工件是天蓝色的仓库Git。
只要有可用的新工件(构建工件或azure git repos工件),就可以触发发布吗?在Azure DevOps中可以做到这一点吗?
答案 0 :(得分:0)
是的,您可以向发布管道添加2个工件。否,(根据您的问题标题)您不能将超过1个工件标记为Starting up Android Studio 3.5.1 (build AI-191.8026.42.35.5900203) ...done.
Opening project...Nov 27, 2019 7:23:50 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
done.
Initializing project...Loaded profile 'Default' from file 'path-to-inspection-profile/Default.xml'
done.
Inspecting with profile 'Default'
Roots file:///root/.gradle/caches/transforms-2/files-2.1/84b089abfb331c5ad2f3ceefb5934971/junit-1.1.1/res of the library 'Gradle: androidx.test.ext:junit:1.1.1@aar' from module 'app' were not resolved
...same error but for every dependency...
Please, specify sdk '1.8' for module 'lint'
。是的,您可以将Primary
添加到希望添加到管道中的任意数量的工件源中。
当心,在存储库更改中使用CD触发器并不需要从Build源中使用的工件与以前的版本不同。我不知道您的情况,但我可能建议您有2个单独的CD Triggers
阶段,每个阶段都应用工件过滤器,这样您才可以在有可用的新版本时使用该版本提交时提供代码。
答案 1 :(得分:0)
只要有可用的新工件(构建工件或azure git repos工件),就可以触发发布吗?在Azure DevOps中可以做到这一点吗?
很抱歉给您带来不便。
构建/发布定义当前仅支持单个触发器。
作为解决方法,您可以将Azure Repos Git artifact
设置为主要项目,以触发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
Update2:
Powershell脚本可以工作,但是会下载旧的构建工件。 但是,我们需要将该版本与最新的构建工件相关联, 该如何完成?
您可以使用另一个REST API来获取最新的发行版ID和environmentId
:
我们可以获得definitionId
的所有发行版ID:
"isDeleted": false,
"lastRelease": {
"id": 285,
"name": "xxxxxx",
"artifacts": [],
"_links": {},
然后使用Select-Object -first 1
获取最新的发行版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来触发发行版。
希望这会有所帮助。