2016-08-26 2 views
24

Я запускаю Jenkins 2 с плагином Pipeline. У меня есть проект с несколькими ветвями, где каждая ветвь (master, develop и т. Д.) Имеет в корне файл Jenkins. Настройка этого была простой. Тем не менее, я не понимаю, как каждую ветвь запускать периодически (а не индексацию ветвей), даже если код не изменяется. Что мне нужно, чтобы включить в мой файл Jenkins, чтобы включить периодические сборки?«Строить периодически» с многоотводным трубопроводом в Дженкинсе

ответ

10

Если вы используете декларативный стиль Jenkinsfile затем использовать triggers директиву.

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

Любой способ сделать cron-триггер только на ветке' master'? Чтобы дать некоторый контекст: когда товарищи по команде создают новую ветвь функции и фиксируют там, файл Jenkins все равно должен запускаться (через опрос или push), но то, что я не хочу, - это запуск триггера cron для этих ветвей функций. – foobarto

+0

@foobarto См. Ответ ниже: https://stackoverflow.com/a/44902622/346 – dwj

16

Я смог найти пример, иллюстрирующий это отбрасывание старых сборников, что тоже я хотел.

Jenkinsfile in jenkins-infra/jenkins.io:

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

BTW для первого свойства вы можете использовать символ 'buildDiscarder' для упрощения синтаксиса, так как должен отображаться ** Pipeline Syntax **. –

+1

Это не работает в сценариях под jenkins 2.79 (java.lang.UnsupportedOperationException: Неопределенный символ 'pipeTriggers') – Eric

+0

Эрик, попробуйте с этим для сценариев: 'pipTriggers ([[$ class:« TimerTrigger », spec : "H 1 * * *"]]) ' – nradev

15

При использовании трубопровода декларативный стиль и только хотят, чтобы вызвать сборку на конкретной отрасли вы можете сделать что-то вроде этого:

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

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

Найдено на Jenkins Jira

+3

Это работает, но обратите внимание, что для запуска и нажатия на Jenkinsfile недостаточно для запуска триггера; работа также должна выполняться вручную после этого. – Cameron

+0

Может ли триггер находиться внутри блока сцены? То есть stage («Развертывание в производство») { triggers { cron (MASTER_TRIGGER) } – Learner

+0

Будет ли это работать в файле декларативных дженкинсов или только в файле сценария jenkins? – Learner

Смежные вопросы