多个主要工件可触发Azure DevOps版本定义

时间:2019-11-27 16:14:26

标签: azure-devops

enter image description here我们在Azure DevOps中具有多个工件来源的发布定义。其中一个工件是构建工件,第二个工件是天蓝色的仓库Git。

只要有可用的新工件(构建工件或azure git repos工件),就可以触发发布吗?在Azure DevOps中可以做到这一点吗?

2 个答案:

答案 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阶段,每个阶段都应用工件过滤器,这样您才可以在有可用的新版本时使用该版本提交时提供代码。

enter image description here

答案 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

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

enter image description here

然后,我们在构建管道中添加一个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

Definitions - Get

我们可以获得definitionId的所有发行版ID:

"isDeleted": false,
"lastRelease": {
    "id": 285,
    "name": "xxxxxx",
    "artifacts": [],
    "_links": {},

然后使用Select-Object -first 1获取最新的发行版ID。

接下来,我们可以将其他API Releases - Get ReleasereleaseId一起使用,这是通过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来触发发行版。

希望这会有所帮助。