我有一个构建脚本,我想对master
,features/*
和releases/*
上的代码运行一些构建步骤,然后一些发布功能 only 在master
和releases/*
分支上。
我似乎找不到任何文档来按分支划分构建脚本。这是我的构建脚本的粗略概述(只是任务,为了简洁起见,省略了参数)
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
后半部分将需要有条件地运行,并且仅当上半部分成功时才运行。我很乐意将它们分成两个脚本,以简化操作。
答案 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示例的屏幕截图:
有关- ${{if...}}
脚本块的更多信息,请参见here。而here是您可以在天蓝色yaml管道中使用的表达式。
另一种解决方法是使用Shayki提到的conditions。但是我使用表达式- ${{if...}}
来检查分支startsWith
。参见以下示例:
- releases/*