2016-08-26 9 views
24

Używam Jenkins 2 z wtyczką Pipeline. Mam projekt Multi-branch Pipeline, w którym każda gałąź (master, develop, etc.) ma plik Jenkins w katalogu głównym. Ustawienie było proste. Brakuje mi jednak możliwości okresowego uruchamiania każdej gałęzi (a nie indeksowania gałęzi), nawet jeśli kod się nie zmienia. Co muszę umieścić w pliku Jenkins, aby umożliwić okresowe kompilacje?"Buduj okresowo" za pomocą potoku z wieloma odgałęzieniami w Jenkins

Odpowiedz

10

Jeśli używasz deklaratywny styl Jenkinsfile następnie użyć dyrektywy triggers.

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

Dowolny sposób wywołania crona tylko w gałęzi' master'? Aby podać pewien kontekst: kiedy członkowie zespołu tworzą nowy oddział funkcji i zatwierdzają, plik Jenkins powinien nadal wywoływać (przez odpytywanie lub pchanie), ale to, czego nie chcę, to wywoływanie crona w tych gałęziach. – foobarto

+0

@foobarto Zobacz odpowiedź w dalszej części: https://stackoverflow.com/a/44902622/346 – dwj

16

Udało mi się znaleźć przykład ilustrujący to odrzucające stare kompilacje, które jest również czymś, co chciałem.

Jenkinsfile in jenkins-infra/jenkins.io:

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

BTW dla pierwszej nieruchomości możesz użyć symbolu 'buildDiscarder', aby uprościć składnię, ponieważ ** Powinna pojawić się składnia potoku **. –

+1

Nie działa w skryptowanych potokach pod Jeny 2.79 (java.lang.UnsupportedOperationException: Undefined symbol 'pipelineTriggers') – Eric

+0

Eric, spróbuj z tym dla skryptowanych potoków: 'pipelineTriggers ([[$ class:" TimerTrigger ", spec : "H 1 * * *"]]) ' – nradev

15

Jeśli używasz deklaratywny stylu Pipeline i tylko chcą wyzwolić opierać się na konkretnej branży można zrobić coś takiego:

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

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

znaleźć na Jenkins Jira

+3

Działa to, ale zauważ, że popełnienie i naciśnięcie pliku Jenkins nie wystarczy, aby uruchomić wyzwalacz; zadanie musi zostać uruchomione również raz ręcznie. – Cameron

+0

Czy spust może znajdować się wewnątrz bloku scen? To znaczy. stage ("Wdrażanie do produkcji") { wyzwala { cron (MASTER_TRIGGER) } – Learner

+0

Czy to działa w deklaratywnym pliku Jenkinsa, czy tylko w pliku JSNKN ze skryptem? – Learner