जेनकिन्स में एक बहु-शाखा पाइपलाइन के साथ "समय-समय पर निर्माण करें"


80

मैं जेनलाइन 2 को पाइपलाइन प्लगइन के साथ चला रहा हूं। मेरे पास एक बहु-शाखा पाइपलाइन परियोजना है जहाँ प्रत्येक शाखा (मास्टर, विकास, आदि) के जड़ में जेनकिंसफाइल है। इसे स्थापित करना सरल था। हालाँकि, मैं समय-समय पर प्रत्येक शाखा को चलाने के लिए एक नुकसान पर हूं (न कि शाखा अनुक्रमणिका), तब भी जब कोड नहीं बदलता है। आवधिक निर्माण को सक्षम करने के लिए मुझे अपने जेनकिंसफाइल में क्या डालने की आवश्यकता है?

जवाबों:


68

यदि आप एक घोषणात्मक शैली की पाइपलाइन का उपयोग करते हैं और केवल एक विशिष्ट शाखा पर बिल्ड को ट्रिगर करना चाहते हैं तो आप कुछ इस तरह से कर सकते हैं:

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

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

जेनकिन्स जीरा पर मिला


15
यह काम करता है, लेकिन ध्यान दें कि जेनकिंसफाइल को कमिट करना और धक्का देना ट्रिगर को उठाए जाने के लिए पर्याप्त नहीं है; नौकरी को एक बार मैन्युअल रूप से बाद में भी चलाया जाना चाहिए।
कैमरून

1
क्या ट्रिगर एक स्टेज ब्लॉक के अंदर हो सकता है? Ie स्टेज ('प्रोडक्शन में तैनात') {ट्रिगर्स {क्रोन (MASTER_TRIGGER)}
लर्नर

2
क्या यह एक घोषणात्मक जेनकींस फ़ाइल या केवल एक स्क्रिप्टेड जेनकींस फ़ाइल में काम करेगा?
शिक्षार्थी

एक घोषणात्मक जेनकिंसफाइल के साथ काम करना चाहिए। ट्रिगर केवल विकल्प टैग iirc के अंदर काम करता है। यदि आप केवल मास्टर शाखा को तैनात करना चाहते हैं, तो आप एक स्क्रिप्ट {if (BRANCH_NAME == „मास्टर”) {// परिनियोजित}} परिनियोजन ब्लॉक के अंदर रख सकते हैं। (मैं वर्तमान में मोबाइल पर हूं इसलिए वाक्यविन्यास गलत हो सकता है)
जूलियन वीरकैंप

@ लर्नर "यदि आप एक घोषणात्मक शैली पाइपलाइन का उपयोग करते हैं"
ऑरेंजडॉग

43

यदि आप एक घोषणात्मक शैली जेनकिंसफाइल का उपयोग कर रहे हैं तो आप ट्रिगर निर्देश का उपयोग करते हैं ।

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

14
केवल masterशाखा पर क्रोन ट्रिगर बनाने का कोई तरीका ? कुछ संदर्भ देने के लिए: जब टीम के साथी एक नई सुविधा शाखा बनाते हैं और वहां काम करते हैं तो जेनकिन्स फाइल को अभी भी ट्रिगर (पोल या पुश के माध्यम से) करना चाहिए, लेकिन जो मैं नहीं चाहता कि इन फीचर शाखाओं पर क्रोन ट्रिगर आग है।
फोबार्टो

उपयोग करें: स्टेज ('स्टेज 1') {जब {ब्रांच "मास्टर"} स्टेप्स {}} या स्टेज ('स्टेज 1 (मास्टर नहीं)') {जब {नहीं {ब्रांच 'मास्टर'}} स्टेप्स {श 'डू-नॉन- master.sh '}}
tr53

29

मैं एक पुरानी पुरानी बिल्डिंग्स को दर्शाते हुए एक उदाहरण ढूंढने में सक्षम था, जो कि कुछ ऐसा है जो मैं चाहता था।

Jenkinsfile in jenkins-infra / jenkins.io:

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

1
BTW पहली संपत्ति के लिए आप buildDiscarderसिंटैक्स को सरल बनाने के लिए प्रतीक का उपयोग कर सकते हैं , जैसा कि पाइपलाइन सिंटैक्स को दिखाना चाहिए।
जेसी ग्लिक

1
यह जेनकींस 2.79 (java.lang.UnsupportedOperationException: अनिर्धारित प्रतीक 'पाइपलाइनटाइगर' के तहत स्क्रिप्टेड पाइपलाइनों में काम नहीं करता है)
gileri

2
एरिक, बस इसके लिए स्क्रिप्टेड पाइपलाइनों के साथ प्रयास करें: 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''' : ""
}

0

मैंने उपरोक्त समाधानों के साथ मुद्दों को मारा।
अगर मैं एक पुराने प्रारूप / वाक्यविन्यास या कुछ का उपयोग कर रहा हूं तो मुझे यकीन नहीं है कि मैं जेनकिन्स विज़ार्ड नहीं हूं, लेकिन निम्नलिखित मेरे लिए काम कर रहा है।

#!/usr/bin/env groovy
properties(
    [
        pipelineTriggers([
                [
                    $class: 'TimerTrigger',
                    spec: 'H 7,19 * * *'
                ]
         ])
    ]
)

इससे निर्धारित: https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/triggers/TimerTrigger.java

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.