jenkins - 使用声明式 Jenkinsfile 在多分支管道上运行夜间作业

标签 jenkins jenkins-pipeline jenkins-declarative-pipeline

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/

相关文章:

java - 使用 Jenkins 启动浏览器

selenium - 从 Jenkins 运行机器人框架测试时浏览器永远不会打开

jenkins - 在并行阶段之前的 Jenkins 声明性管道中创建顺序步骤

jenkins - 如何从 SCM 中的管道刷新作业配置

来自 YAML 文件的 Jenkins 管道

Jenkins 管道作业构建

windows - 无法从 Windows 上的浏览​​器访问 Jenkins

jenkins - 在 Jenkinsfile 中触发远程构建(例如,从脚本)语法

jenkins - gradle artifactory 发布 : jenkins pipeline does not publish properties

jenkins - 从 Jenkinsfile 中的 xml 文件获取属性值