有什么方法可以在按计划触发时将参数传递给 azure devops 构建管道 (YAML)?例如。如果您想每晚构建一个发布构建,但也想每周构建一个调试构建?
必须将整个构建管道复制到 SomeBuild-Debug 才能生成默认配置=调试的构建,以便能够安排它,这似乎不正确?
可以检测到构建是通过计划触发的。根据这些信息,您可以设置某些变量或触发某些进程。
Azure DevOps 管道使您可以访问一堆预定义变量。特别是
Build.Reason
:
导致构建运行的事件。
:用户手动对构建进行排队。Manual
:由 Git 推送或 TFVC 签入触发的持续集成 (CI)。IndividualCI
:通过 Git 推送或 TFVC 签入触发持续集成 (CI),并选择批量更改。BatchedCI
:预定触发。Schedule
:用户手动对特定 TFVC 搁置集的构建进行排队。ValidateShelveset
:门禁签到触发器。CheckInShelveset
:构建是由需要构建的 Git 分支策略触发的。PullRequest
:构建是由资源触发器触发的,或者是由另一个构建触发的。ResourceTrigger
基于此变量,可以定义自定义变量:
variables:
${{ if eq( variables['Build.Reason'], 'Schedule' ) }}:
myCustomVariable: 'Weekly debug'
或触发自定义流程:
- task: CmdLine@2
condition: eq( variables['Build.Reason'], 'Schedule' ))
displayName: 'My scheduled script'
inputs:
script: echo "I was launched during a scheduled build"
信用:这个答案的灵感来自Kevin Lu-MSFT'sanswer动态设置自动管道的参数值
您可以通过 REST API 使用外部服务(ansible、自动化任务等)安排 Azure DevOps 构建。在其余 API 调用中,您可以指定输入参数。这样,您将需要使用外部服务而不是 .yml 文件的
schedule
来安排构建管道的触发器。
触发构建管道的示例。您应该替换 **
之间的字符POST https://dev.azure.com/**GeralexGR**/**test-project**/_apis/pipelines/**11**/runs?&api-version=6.1-preview.1
本体部分
请记住,您还需要使用 PAT 进行身份验证才能使用 Azure Devops 的 REST API。
除了 @Métoule 的答案之外,如果您想要拥有多个计划并更改每个计划的运行行为,还可以使用预定义变量 Build.CronSchedule.DisplayName。
schedules:
- cron: '* * * * *'
displayName: scheduled main build
branches:
include:
- main
- cron: '* * * * *'
displayName: scheduled develop build
branches:
include:
- develop
steps:
- ${{ if eq( variables['Build.CronSchedule.DisplayName'], 'scheduled main build' ) }}:
- script: echo scheduled build from main!
- ${{ if eq( variables['Build.CronSchedule.DisplayName'], 'scheduled develop build' ) }}:
- script: echo scheduled build from develop!