我们在gitlab repo中有一个jenkinsfile,我希望根据gitlab变更集避免几个阶段。当只修改了K8S conf文件时,基本上不需要构建和推送我们的容器映像。假设回购中有4个文件夹:
- velero
- k8
- 监测
- 码头图像
首先我尝试了以下操作,但在同一提交中更改dockerimage和k8s文件夹中的文件将被视为有效条件,并将避免步骤。。。这当然不是我们想要的。
when {
not {
changeset "**/k8s/**"
}
not {
changeset "Monitoring/**"
}
not {
changeset "
}
}
所以我想到了这个,但是看起来regex没有得到正确的评估,无论发生什么变化,都总是避免步骤。那么,正则表达式是错误的,还是在变更集条件下不允许使用正则表达式?
when {
anyOf {
changeset '^((?!velero|k8s|monitoring).)*$'
}
}
当然,我们可以使用"anyOf"条件列出我们想要触发构建和推送的所有文件夹,但这就不那么灵活了,因为我们要构建的文件夹比要避免的文件夹多,并且添加要构建的新文件夹也需要更新jenkinsfile。
如果你们有想法。。。请告诉我:(
没关系。。。找到了另一条路。我计划根据提交内容的更改绕过我们的管道步骤,但下面提供了更多的灵活性,允许开发人员在任何提交注释中键入"#DNB"(不区分大小写(时绕过这些步骤。
when {
not {
changelog '^.*(?i)#DNB.*$'
}
}