使用Jenkins的多分支管道"定期构建"

geo*_*wa4 62 jenkins jenkins-pipeline

我正在使用Pipeline插件运行Jenkins 2.我已经设置了一个多分支管道项目,其中每个分支(主,开发等)在根目录中都有一个Jenkins文件.设置这个很简单.但是,即使代码没有改变,我也不知道如何定期运行每个分支(而不是分支索引).我需要在Jenkinsfile中添加什么才能启用定期构建?

Jul*_*amp 47

如果您使用声明式样式管道并且只想在特定分支上触发构建,则可以执行以下操作:

String cron_string = BRANCH_NAME == "master" ? "@hourly" : ""

pipeline {
  agent none
  triggers { cron(cron_string) }
  stages {
    // do something
  }
}
Run Code Online (Sandbox Code Playgroud)

Jenkins Jira找到

  • 这有效,但请注意,提交和推送Jenkins文件不足以触发触发器; 之后也必须手动运行该作业. (11认同)
  • 这将在声明性的詹金斯文件中还是仅在脚本化的詹金斯文件中工作? (2认同)

tee*_*s99 36

如果您使用声明式样式Jenkinsfile,则使用triggers指令.

pipeline {
    agent any
    triggers {
        cron('H 4/* 0 0 1-5')
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 有没有什么方法可以在`master`分支上触发cron?给出一些上下文:当队友创建一个新的功能分支并提交时,Jenkins文件应该仍然触发(通过轮询或推送),但我不想要的是这些功能分支上的cron触发器. (13认同)

geo*_*wa4 25

我能够找到一个例子说明这是一个丢弃的旧版本,这也是我想要的.

Jenkinsfile 在jenkins-infra/jenkins.io:

properties(
    [
        [
            $class: 'BuildDiscarderProperty',
            strategy: [$class: 'LogRotator', numToKeepStr: '10']
        ],
        pipelineTriggers([cron('H/30 * * * *')]),
    ]
)
Run Code Online (Sandbox Code Playgroud)

  • 埃里克(Eric),只需在脚本管道中尝试以下方法:`pipelineTriggers([[$ class:“ TimerTrigger”,spec:“ H 1 * * *”]])) (2认同)

小智 6

这为我工作:

  triggers {
    cron(env.BRANCH_NAME == 'development' ? 'H */12 * * *' : '')
  }
Run Code Online (Sandbox Code Playgroud)

本文中查看更多

  • 这只是重复了 @Julian Veerkamp 的答案,包括链接的 Jira 问题。 (5认同)