0

我有一个构建脚本,我想在 和 上运行一些代码构建步骤masterfeatures/*然后在和分支上运行releases/*一些发布功能。masterreleases/*

我似乎找不到任何文档来按分支划分构建脚本。这是我的构建脚本的粗略概述(只是任务,为简洁起见省略参数)

trigger:
- master
- releases/*
- features/*

pool:
  vmImage: 'windows-latest'

name: $(Major).$(Minor).$(rev:r)
variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  Major: 1
  Minor: 1

steps:

- task: NuGetCommand@2

- task: VSBuild@1

- task: VSTest@2

## I would like everything below this line to only be run on releases/* or master

- task: WhiteSource Bolt@20

- task: NuGetCommand@2

- task: PublishBuildArtifacts@1

下半场需要有条件地运行,并且只有在上半场成功的情况下。我愿意将它们分成两个脚本,这样更容易。

4

2 回答 2

2

您可以使用自定义条件来检查分支名称:

and(succeeded(), in(variables['Build.SourceBranch'], 'refs/heads/master', 'refs/heads/releases/*'))

在 YAML 中,您在步骤中添加:

condition: and(succeeded(), in(variables['Build.SourceBranch'], 'refs/heads/master', 'refs/heads/releases/*'))
于 2020-07-01T14:47:04.967 回答
1

您可以- ${{if...}}:在管道中使用脚本块。请参见下面的示例:

 steps:
 - powershell: echo "task 0"    
   displayName: task 0

 - ${{ if or(eq(variables['Build.SourceBranch'],'refs/heads/master'), startsWith(variables['Build.SourceBranch'],'refs/heads/release/')) }}:  

   - powershell: echo "task 1"
     displayName: task 1

   - powershell: echo "task 2"
     displayName: task 2 

注意:Yaml 管道可能会在- ${{if...}}脚本块上方以红色波浪线突出显示。但是保存管道后它会消失。并且缩进非常重要。

在上面的例子中,如果- ${{if...}}脚本块被评估为真,那么任务 1 和任务 2 将被执行。请参阅上面 yaml 示例的以下屏幕截图: 在此处输入图像描述

有关脚本块的更多信息,请参见此处。- ${{if...}}这里是您可以在 azure yaml 管道中使用的表达式

另一种解决方法是使用Shayki 提到的条件。但我使用表达式 startsWith来检查分支- releases/*。请参见下面的示例:

steps:
 - powershell: echo "task 0"    
   displayName: task 0

 - powershell: echo "task 1"
   condition: or(eq(variables['Build.SourceBranch'],'refs/heads/master'), startsWith(variables['Build.SourceBranch'],'refs/heads/releases/'))
   displayName: task 1

 - powershell: echo "task 2"
   condition: or(eq(variables['Build.SourceBranch'],'refs/heads/master'), startsWith(variables['Build.SourceBranch'],'refs/heads/releases/'))
   displayName: task 2 
于 2020-07-02T03:57:47.810 回答