azure-devops - 根据提交消息跳过阶段

标签 azure-devops azure-pipelines multistage-pipeline

我正在尝试将 Azure DevOps 设置为跳过 multi-stage pipeline 上的一个阶段如果消息不以给定文本开头。

来自 examples documentation ,我认为这只是

  - stage: t1
    condition: not(startsWith(variables['Build.SourceVersionMessage'], '[maven-release-plugin]'))
    jobs:
      - job: ReleasePrepare
        displayName: Prepare release
        pool:
          vmImage: 'ubuntu-16.04'
        steps:
          - script: |
              env | sort

但是,无论如何都会执行。这是我期望 t1 的示例不基于提交消息运行的任务 https://dev.azure.com/trajano/experiments/_build/results?buildId=110&view=results
env的输出显示消息被正确传递

enter image description here

以防万一这是一个错误,我也在这里报告了 https://developercommunity.visualstudio.com/content/problem/697290/startswith-buildsourceversionmessage-variable-not.html

最佳答案

看来Build.SourceVersionMessage在这篇文章发表时只能在 steps 上解析.

这是一个工作示例,它在一个步骤中将值存储在变量中并在下一个作业中使用它(可以是 deployment )

trigger:
  batch: true
  branches:
    include:
      - master

stages:
  - stage: ci
    displayName: Continuous Integration
    jobs:
      - job: Build
        pool:
          vmImage: 'ubuntu-16.04'
        steps:
          - script: |
              env | sort
              echo "$(Build.SourceVersionMessage)"
  - stage: t1
    displayName: Release
    condition: eq(variables['Build.SourceBranch'],'refs/heads/master')
    jobs:
      - job: GetCommitMessage
        displayName: Get commit message
        steps:
          - bash: |
              echo "##vso[task.setvariable variable=commitMessage;isOutput=true]$(Build.SourceVersionMessage)"
              echo "Message is '$(Build.SourceVersionMessage)''"
            name: SetVarStep
            displayName: Store commit message in variable
      - job: ReleasePrepare
        displayName: Prepare release
        dependsOn: GetCommitMessage
        pool:
          vmImage: 'ubuntu-16.04'
        condition: not(startsWith(dependencies.GetCommitMessage.outputs['SetVarStep.commitMessage'], '[maven-release-plugin]'))
        steps:
          - script: |
              echo this would be a candidate for release
              env | sort
            displayName: Don't do it if maven release
      - job: NotReleasePrepare
        displayName: Don't Prepare Release
        dependsOn: GetCommitMessage
        pool:
          vmImage: 'ubuntu-16.04'
        condition: startsWith(dependencies.GetCommitMessage.outputs['SetVarStep.commitMessage'], '[maven-release-plugin]')
        steps:
          - script: |
              echo this not be a candidate for release because it was created by the plugin
              env | sort
            condition: startsWith(variables.commitMessage, '[maven-release-plugin]')
            displayName: Do it if maven release


该版本可以在 https://dev.azure.com/trajano/experiments/_build/results?buildId=133&view=logs&s=6fc7e65a-555d-5fab-c78f-9502ae9436c4&j=b5187b8c-216e-5267-fcdb-c2c33d846e05 中找到

关于azure-devops - 根据提交消息跳过阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520202/

相关文章:

msbuild - 忽略 Azure Pipelines 中 .vdproj 项目的 NuGet 包还原

azure - 集中管理的 Azure 管道

.net-core - Azure Pipeline 中的 .Net Core、Visual Studio 构建和 MSBuild 任务之间的区别?

azure - 在基于 yaml 的 multiStage 管道中,我需要在一个应用程序服务上为 2 个基于 dotnet 核心的项目发布 webApp 和 webjobs,这些项目位于一个 sol 中

azure - 在 Azure DevOps Pipeline "partially"中并行运行两个阶段

c# - 在 Azure DevOps 上显示 NUnit 测试代码覆盖率

azure - 如果 azure 管道中的任何任务失败,请删除 Azure 资源

azure - 为什么我的变量值没有在 azure 管道中更新?

entity-framework - 使用 Azure Pipeline 任务进行 EF 迁移