Yaml构建脚本-通过git branch运行任务

时间:2020-07-01 13:39:15

标签: git azure-devops yaml azure-pipelines azure-pipelines-yaml

我有一个构建脚本,我想对masterfeatures/*releases/*上的代码运行一些构建步骤,然后一些发布功能 only 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

后半部分将需要有条件地运行,并且仅当上半部分成功时才运行。我很乐意将它们分成两个脚本,以简化操作。

2 个答案:

答案 0 :(得分:1)

您可以将custom condition与分支名称一起使用:

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/*'))

答案 1 :(得分:1)

您可以在管道中使用public void constructClass(String text, Class<?> clazz) { Type type = clazz.getGenericSuperclass(); if (Collection.class == clazz || List.class.isAssignableFrom(clazz)) { if (type instanceof ParameterizedType) { ParameterizedType pType = (ParameterizedType) type; Type genericType = pType.getActualTypeArguments()[0]; this.constructClass(text, genericType.getClass()); } } else if (Map.class == clazz) { } else { } if (type instanceof ParameterizedType) { ParameterizedType pType = (ParameterizedType) type; pType.getActualTypeArguments()[0] } } 脚本块。参见以下示例:

- ${{if...}}:

注意:Yaml管道可能会突出显示 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 脚本块上方的红色波浪线。但是在您保存管道后,它将消失。而且缩进非常重要。

在上面的示例中,如果将- ${{if...}}脚本块评估为true,则将执行任务1和任务2。请参阅以下来自yaml示例的屏幕截图: enter image description here

有关- ${{if...}}脚本块的更多信息,请参见here。而here是您可以在天蓝色yaml管道中使用的表达式。

另一种解决方法是使用Shayki提到的conditions。但是我使用表达式- ${{if...}}来检查分支startsWith。参见以下示例:

- releases/*
相关问题