首页 > 解决方案 > 如果触发了特定的工件,则表达式验证 azure devops

问题描述

我有多个工件,我会检测在构建后是否触发了这些工件之一并将其部署到其各自的代理

or(succeeded(), eq(variables['Build.SourceBranch'], '$_Multi-Country/SSIS_FileDrop/Dev/DEV'))

标签: azureazure-devops

解决方案


由于您可以将多个工件源绑定到一个发布定义,因此不存在这样的预定义变量可以实现工件名称。

虽然 artifacts source 对于发布管道来说不是唯一的,但是与 artifacts 相关的build id在发布中是唯一的,并且可以通过一个预定义的变量来获取Build.Buildid

所以,这里同意@MarTin 的评论,你可以先使用这个api来实现工件名称。

下面是 powershell 脚本示例:

$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds/$env:BUILD_BUILDID/artifacts?api-version=4.1"

$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method Get

Write-Host "artifactName:" ($artifactName = $Pipeline.value.name)

Write-Host "##vso[task.setvariable variable=artifactName]$artifactName"

在此脚本中,使用环境SYSTEM_TEAMFOUNDATIONCOLLECTIONURISYSTEM_TEAMPROJECTID获取当前组织名称和项目名称。此外,支持此 api 的最新版本是4.1.

您可以在代理作业的第一步中添加此 powershell 任务。然后,您将能够使用artifactName条件表达式中的变量来验证触发器工件名称是否是特定的。


推荐阅读