2017-02-21 11 views
5

मैं अलग खजाने जो हिस्सा एक ही मौलिक सीआई-कार्यप्रवाह, जो मैं आसानी से एक घोषणात्मक पाइपलाइन के रूप में व्यक्त कर सकते हैं में परियोजनाओं की एक बहुत कुछ है भर में एक घोषणात्मक पाइपलाइन साझा करने के लिए:कितने परियोजनाओं

pipeline { 
    agent any 

    options { 
    buildDiscarder(logRotator(numToKeepStr: '20')) 
    } 

    stages { 
    stage('CI') { 
     steps { 
     echo 'Do CI' 
     } 
    } 

    stage('QA') { 
     steps { 
     echo 'Do QA' 
     } 
    } 
    } 

    post { 
    always { 
     junit allowEmptyResults: true, testResults: '**/target/surefire-reports/TEST-*.xml' 
     // etc... 
    } 

    failure { 
     echo 'Failure mail' 
     // etc 
    } 
    } 
} 

मैं चाहूँगा मेरी सभी परियोजनाओं में एक ही घोषणात्मक पाइपलाइन का उपयोग करने के लिए और केवल एक ही स्थान पर पाइपलाइन की परिभाषा को बदलने की क्षमता है और सभी परियोजनाओं में स्वचालित रूप से उपयोग किए जाने वाले परिवर्तन हैं।

अनिवार्य रूप से क्या मैं एक परियोजना में क्या करना होगा की Jenkinsfile यह है:

loadPipelineFromScm 'repository', 'pipeline.groovy' 

मैं पहले से ही साझा पुस्तकालयों के साथ ऐसा कर सकते हैं, लेकिन तब मैं अब और घोषणात्मक पाइपलाइन सुविधाओं का उपयोग करने में सक्षम नहीं हूँ।

क्या साझा करने का कोई तरीका है घोषणात्मक कई रिपॉजिटरीज़ में पाइपलाइन?

+0

आप यह सुनिश्चित करें कि एक कथात्मक पाइपलाइन एक साझा लाइब्रेरी में काम नहीं कर सकता हैं:

निम्न समस्या जेनकींस के पीछे टीम द्वारा अस्वीकार कर दिया देखते हैं? [घोषणात्मक पाइपलाइन: अधिसूचनाएं और साझा पुस्तकालय दस्तावेज] (https://jenkins.io/blog/2017/02/15/declarative-notifications/) वास्तव में ऐसा करने लगते हैं। क्या आप कुछ ऐसा नहीं कर सके? – herm

उत्तर

0

मैं अपने स्वयं के काम के लिए एक ही समस्या का सामना कर रहा हूं। सबसे अच्छा समाधान मैं था के साथ आ सकता है मेरे संगठन में हर परियोजना/रेपो में एक सामान्य Jenkinsfile में शामिल हैं:

node 
{ 
    checkout([$class: 'GitSCM', branches: [[name: env.DELIVERY_PIPELINE_BRANCH]], userRemoteConfigs: [[credentialsId: env.DELIVERY_PIPELINE_CREDENTIALS, url: env.DELIVERY_PIPELINE_URL]]]) 
    stash includes: '*.groovy', name: 'assets', useDefaultExcludes: false 
    load './Jenkinsfile.groovy' 
} 

मैं मामले चीजों को बदलने की जरूरत में वातावरण चर का इस्तेमाल किया है, शायद उससे भी अधिक गतिशील हो सकता है मेरी उदाहरण वर्तमान (यह सब अभी भी विकास में है)।

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

अंत में यह घोषणात्मक पाइपलाइन लोड करता है। विचारों के साथ गड़बड़ नहीं है, मूल रूप से सभी सामान्य व्यवहार करते हैं।

तो यह वही नहीं है जो आप खोज रहे थे, और इसके बजाय मुझे पहले स्थान पर एससीएम से खींचने की क्षमता होगी। लेकिन हे, यह समय के लिए मेरे लिए काफी अच्छा काम कर रहा है।

1

जबकि विचारों को नोबोर 01 से सुझाव का उपयोग करके बरकरार रखा गया है, तो घोषणात्मक पाइपलाइन ठीक से काम नहीं करेगी। जैसे जब खंडों को अनदेखा कर दिया जाएगा, क्योंकि पाइपलाइन तत्व शीर्ष-स्तर होने की उम्मीद है, जिसका अर्थ है कि इसे इसके बजाय स्क्रिप्ट पाइपलाइन के रूप में पार्स किया गया है। loading external declarative pipelines issue

संबंधित मुद्दे