Jenkins 版本 2.121.2
我设置了多分支管道。我正在使用声明性 Jenkinsfile。
我有一组需要很长时间才能运行的测试。我希望这些能够在夜间为任何发生更改的分支运行。
我尝试了一些方法,但我当前失败的尝试是:
在作业 > 配置下,我启用了“抑制自动 SCM 触发”
将“扫描多分支管道触发器”>“如果不以其他方式运行则定期运行”设置为 1 分钟(仅用于测试,我会在运行时增加此值)
在我的 Jenkinsfile(凌晨 4 点运行的示例)中,我还尝试过使用 pollSCM()
:
triggers {
cron('0 4 * * *')
}
在“扫描多分支管道日志”中,我看到以下内容,但凌晨 4 点没有作业运行(Jenkinsfile 中 trigger()
中的时间):
Changes detected: my-feature-branch (1234567890abcdefgh → abcdefgh123456789)
Did not schedule build for branch: my-feature-branch
请问我做错了什么?
<小时/>编辑:
所以我尝试了这个设置:
将 cron 设置为每 15 分钟一次
triggers {
cron('5,20,35,50 * * * *')
}
删除了 UI 中配置下的设置“抑制自动 SCM 触发”
但它只是在轮询发生的那一刻开始运行(在本测试中是整点过 16 分钟)。
我什么都不做似乎关注我的 cron 设置?
如果我在 UI 中的分支作业下进入“查看配置”,它会显示我的 Jenkinsfile 中的 UI 设置。
<小时/>编辑(再次!):
因此,在最后一次编辑中,它实际上立即运行,然后在 cron 时间再次运行。
现在在 UI 中再次启用设置“抑制自动 SCM 触发”。
我已经成功了!我意识到的主要问题(a)更改未应用,我认为直到第一次运行后才应用 Jenkinsfile 中的更改? (b) 我还安装了下一个执行插件,这样我就可以更好地看到它正在计划什么。
最佳答案
这里的问题是在 multibranchPipelineJob 中声明的触发器用于扫描多分支。要定期运行作业,请在管道中声明触发器,如下所示:
pipeline {
triggers {
cron('45 6 * * 1-5')
}
agent {
...
关于jenkins - 使用声明式 Jenkinsfile 在多分支管道上运行夜间作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51769750/