如何解决Jenkins作业dsl不是幂等的,并且每次运行都会触发分支扫描
我使用作业dsl创建multibranchPipelineJob作业。
在我的工作dsl脚本中,我创建了一些multibranchPipelineJobs。如果我运行种子作业,则无论配置是否更改,它都会触发所有multibranchPipelineJobs的分支扫描作业。这必须表示它不是幂等的,而只是重新应用配置并保存它,从而导致Jenkins触发作业扫描。这是预期的吗?有没有办法让作业dsl首先检查是否有变化,然后才每次都破坏整个东西?
我想确认我所期望的行为是预期的,或者我做错了什么。
解决方法
通常情况并非如此,并且DSL不会重新应用配置(不过,我还没有将DSL与multibranchPipelineJobs一起使用)。
但是,一旦完成构建,某些插件会默默地修改作业配置。在这种情况下,运行DSL脚本将根据DSL规范重新应用(或者是:还原)作业配置。
您可以使用“作业配置历史记录”插件来跟踪此类情况。原始作业配置的无提示修改将显示为变更日志中“系统”的修改。
,我最近遇到了同样的问题。此处描述:https://issues.jenkins-ci.org/browse/JENKINS-43693
解决方案是确保所有分支源均指定了不会更改的ID。当JobDSL运行您的定义时,如果未指定ID,它将生成一个新ID。然后,多分支管道将失去对已建立分支的跟踪,因此无法进行重新构建。该ID在所有作业中都必须是唯一的,因此我通常使用作业名称本身的变体。
对于bitbucket分支,来源,其指定方式如下:
multibranchPipelineJob(jobName) {
branchSources {
branchSource {
source {
bitbucket {
id 'some-unique-constant-id'
//etc
}
}
}
}
}
对于git来说,是相似的:
multibranchPipelineJob(jobName) {
branchSources {
branchSource {
source {
git {
id 'must-be-unique'
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。