与此类似的最接近的事情是@Simon Ness 使用路径过滤器编写了多个管道。此外,如果您的包具有相似的结构并且需要相同的步骤来创建/测试/发布包,您应该考虑使用模板。
像您描述的 conspet toi 处理包可以类似于以下步骤。
模板.yaml
parameters:
- name: workingDir
type: string
default: package-1
steps:
- script: npm install
workingDiretory: ${{ parameters.workingDir }}
- script: yarn install
workingDiretory: ${{ parameters.workingDir }}
- script: npm run compile
workingDiretory: ${{ parameters.workingDir }}
然后 Package-1 的管道可能如下所示:
trigger:
branches:
include:
- master
- releases/*
paths:
include:
- Package-1/*
steps:
- template: templates/template.yaml
parameters:
workingDir: Package-1
对于包 2:
trigger:
branches:
include:
- master
- releases/*
paths:
include:
- Package-2/*
steps:
- template: templates/template.yaml
parameters:
workingDir: Package-2
编辑
对于标签部分,您需要做的就是更改触发器部分:
trigger:
branches:
include:
- master
- refs/tags/*
当您创建标签并推送它时:
git tag release-05
git push origin --tags
您的管道将开始:
但是,触发器的工作方式类似于 or 条件,因此对于 master 或 new tag piepline 的任何更改都将开始。因此,如果您标记另一个分支(不是主)管道将启动。
这就是为什么您可能需要检查您的源分支是否来自触发器部分的原因:
trigger:
branches:
include:
- master
- refs/tags/*
stages:
- stage: A
condition: eq(variables['Build.SourceBranch'], 'master')
jobs:
- job: JA
steps:
- script: |
echo "This is job Foo."
以上管道将运行:
- master分支的变化
- 推送到服务器的任何标签,但仅当您将标签推送到主分支时它才会运行阶段 A