首页 > 解决方案 > 有条件地将 --dry-run 添加到 Azure Pipelines 中的发布步骤

问题描述

我们的 Azure Pipeline 中有这一步。npm run publish-shell-ui如果分支是 则运行main,否则跳过步骤。我想修改此步骤,以便--dry-run在分支不是main.

  - task: Npm@1
    displayName: "Publish"
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
    inputs:
      command: 'custom'
      customCommand: 'run publish-shell-ui'
      workingDir: '$(BuildRoot)'

我知道我可以通过添加第二个“Dry-Run Publish”任务来解决这个问题,该任务只会在分支不是时运行main,但我问是否可以制作一个任务,这将处理这两种情况,因为我怀疑,这样的解决方案会更容易阅读。

  - task: Npm@1
    displayName: "Dry-Run Publish"
    condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/main'))
    inputs:
      command: 'custom'
      customCommand: 'run publish-shell-ui --dry-run'
      workingDir: '$(BuildRoot)'

标签: azure-pipelines

解决方案


我过去使用的东西是用于存储值的变量,这些值根据传递到 YAML 管道/模板的参数而更改。

我相信这样的事情会完成你正在寻找的东西:

- script: |
   branch='$(Build.SourceBranch)'
   if [[ $branch == *"/main"* ]]
   then
      echo '##vso[task.setvariable variable=PublishCommand]run publish-shell-ui
   else
      echo '##vso[task.setvariable variable=PublishCommand]run publish-shell-ui --dry-run
   fi
  displayName: "Set Publish Command" 
  condition: ne(variables['Build.SourceBranch'], 'refs/heads/main')      
- task: Npm@1
  displayName: "Publish"
  condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
     command: 'custom'
     customCommand: $(PublishCommand)
     workingDir: '$(BuildRoot)'

推荐阅读