詹金斯的多分支管道“定期构建”


80

我正在使用Pipeline插件运行Jenkins 2。我已经建立了一个多分支管道项目,其中每个分支(主分支,开发分支等)的根目录都有一个Jenkinsfile。设置起来很简单。但是,即使代码未更改,如何让每个分支定期运行(而不是分支索引),我还是一头雾水。我需要在Jenkinsfile中添加什么以启用定期构建?

Answers:


67

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

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

pipeline {
  agent none
  triggers { cron(cron_string) }
  stages {
    // do something
  }
}

詹金斯·吉拉Jenkins Jira)上发现


14
这是可行的,但是请注意,提交并推送Jenkinsfile不足以使触发器被拾取;此后,该作业也必须手动运行一次。
卡梅伦

1
触发器可以在舞台块内吗?即阶段(“部署到生产”){触发{cron(MASTER_TRIGGER)}
学习者

2
这将在声明性的詹金斯文件中还是仅在脚本化的詹金斯文件中工作?
学习者

应与声明性Jenkinsfile一起使用。触发器仅在选项标签iirc中起作用。如果只想部署master分支,则可以将脚本{if(BRANCH_NAME ==„ Master“){// deploy}}放在部署块中。(我目前在移动设备上,因此语法可能有误)
朱利安·韦尔坎普

@Learner“如果您使用声明式样式管道”
OrangeDog

43

如果使用声明性样式的Jenkinsfile,则可以使用triggers指令。

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

14
有什么办法可以使cron仅在master分支上触发?给出一些背景信息:当队友创建一个新的功能分支并提交在那里时,Jenkins文件仍应触发(通过轮询或推送),但是我不想要的是cron在这些功能分支上触发触发器。
foob​​arto

使用:stage('Stage1'){当{分支“ master”}步骤{}}或stage('Stage1(非master)'){当{not {branch'master'}}}步骤{sh'do-non- master.sh'}}
tr53

29

我能够找到一个示例,说明这是一个废弃的旧版本,这也是我想要的。

Jenkinsfile 在jenkins-infra / jenkins.io中:

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

1
顺便说一句,对于第一个属性,可以使用buildDiscarder符号简化语法,如流水线语法所示。
Jesse Glick

1
它在jenkins 2.79(java.lang.UnsupportedOperationException:Undefined
symbol'pipelineTriggers

2
埃里克(Eric),只需尝试使用此脚本管道即可: pipelineTriggers([[$class: "TimerTrigger", spec: "H 1 * * *"]])
nradev


2

对于Paramertized定期运行或计划的触发器,可以如下使用。

triggers{
    parameterizedCron env.BRANCH_NAME == "develop" ? '''H 03 * * * % buildSlave=vm1;testSlave=vm2;HYPERVISOR=vbox;VERSION=10.5.0.0
H 03 * * * % buildSlave=vm1;testSlave=vm2;HYPERVISOR=workstation;VERSION=10.5.0.0''' : ""
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.