仅当最后一次提交包含关键字时才执行阶段

时间:2019-10-30 12:29:39

标签: azure-devops

在yml文件中,我有一个阶段(名为RELEASE),仅当触发提交包含cetain关键字时,才需要执行该阶段,而我的管道被提交触发了。

预定义变量 Build.SourceVersionMessage 仅在任务级别可用,我今天使用它来分别跳过RELEASE阶段的每个任务,但是我正在搜索一次跳过所有阶段。

任何想法如何在不使用bash导出或数据库插入的情况下正确执行此操作吗?

谢谢

1 个答案:

答案 0 :(得分:2)

有一些解决方法可以实现。 1, 第一种解决方法是在上一阶段中,您需要添加脚本任务以输出值为Build.SourceVersionMessage的变量。并在发布阶段添加dependencycondition。您可以参考以下示例:

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:
...