在yml文件中,我有一个阶段(名为RELEASE),仅当触发提交包含cetain关键字时,才需要执行该阶段,而我的管道被提交触发了。
预定义变量 Build.SourceVersionMessage 仅在任务级别可用,我今天使用它来分别跳过RELEASE阶段的每个任务,但是我正在搜索一次跳过所有阶段。
任何想法如何在不使用bash导出或数据库插入的情况下正确执行此操作吗?
谢谢
答案 0 :(得分:2)
有一些解决方法可以实现。
1,
第一种解决方法是在上一阶段中,您需要添加脚本任务以输出值为Build.SourceVersionMessage
的变量。并在发布阶段添加dependency
和condition
。您可以参考以下示例:
stages:
- stage: Publish
displayName: 'Publish stage'
jobs:
- job: jobA
pool: Default
...
- script: echo "##vso[task.setvariable variable=commitMessage;isOutput=true]$(Build.SourceVersionMessage)"
name: setvarStep
- stage: Release
dependsOn: Publish
condition: contains(dependencies.<Previous stage name>.outputs['<name of the job which execute the task.setvariable >.setvarStep.commitMessage'], 'keyword')
jobs:
- job:
....
2。
实现此目标的另一个解决方法是添加一个带有Powershell任务的阶段,该阶段评估Build.SourceVersionMessage
的值。然后在此阶段的Release阶段添加依赖项和条件。
在下面的示例中,阶段 GetSourceMessage 有一个具有单个powershell任务的作业,如果Build.SourceVersionMessage
不包含“关键字”,该任务将失败。阶段 Release 取决于阶段 GetSourceMessage ,只有在阶段 GetSourceMessage 成功的条件下才能执行。
...
- stage: GetSourceMessage
jobs:
- job: jobofstage2
steps:
- powershell: |
if('$(Build.SourceVersionMessage)' -inotmatch "key")
{
exit 1
}
- stage: Release
dependsOn: GetSourceMessage
condition: succeeded()
jobs:
...