我们在gitlab仓库中有一个jenkinsfile,我想避免一些取决于gitlab更改的阶段。基本上,当只有K8S conf文件被修改时,不需要构建和推送我们的容器镜像。假设仓库中有4个文件夹:
- Velero
- k8s
- 监测
- dockerimages
首先,我尝试了以下方法,但是在同一次提交中更改dockerimages和k8s文件夹中的文件将被视为有效条件,并且步骤将被避免.
when {
not {
changeset "**/k8s/**"
}
not {
changeset "Monitoring/**"
}
not {
changeset "
}
}
字符串
所以我想出了这个,但是它看起来像regex没有被正确评估,并且无论如何更改,步骤总是被避免。所以要么regex是错误的,要么regex在更改条件中不允许使用?
when {
anyOf {
changeset '^((?!velero|k8s|monitoring).)*$'
}
}
型
当然,我们可以使用“anyOf”条件来列出我们想要触发构建和推送的所有文件夹,但这不太灵活,因为我们要构建的文件夹比要避免的文件夹多,并且添加新的文件夹来构建也需要更新jenkinsfile。
如果你们有什么想法,请告诉我:)
2条答案
按热度按时间2w2cym1i1#
没关系.找到了另一种方法。我计划根据提交内容的变化绕过我们的管道步骤,但下面的代码提供了更大的灵活性,允许开发人员在任何提交评论中输入“#DNB”(不区分大小写)时绕过这些步骤。
字符串
kmbjn2e32#
到2023年,
changeset
允许使用不同类型的模式评估:可选参数
comparator
可以添加在属性之后,以指定如何评估匹配的任何模式:EQUALS
用于简单的字符串比较GLOB
(默认值),用于ANT样式的路径glob不区分大小写(可以使用caseSensitive
参数关闭)。REGEXP
用于正则表达式匹配例如:
when { changeset pattern: ".TEST\\.java", comparator: "REGEXP" }
或when { changeset pattern: "*/*TEST.java", caseSensitive: true }