जवाबों:
आप पाइपलाइन स्क्रिप्ट को स्थानीय रूप से निष्पादित नहीं कर सकते, क्योंकि इसका पूरा उद्देश्य जेनकिंस को स्क्रिप्ट करना है। (जो एक कारण है कि अपने Jenkinsfileशॉर्ट और कोड को सीमित रखना सबसे अच्छा है, जो वास्तव में जेनकींस की विशेषताओं से संबंधित है; आपके वास्तविक बिल्ड लॉजिक को बाहरी प्रक्रियाओं से बनाया जाना चाहिए या उन उपकरणों का निर्माण करना चाहिए जिन्हें आप एक-लाइन shया batचरण के माध्यम से लागू करते हैं ।)
आप के लिए एक परिवर्तन परीक्षण करना चाहते हैं Jenkinsfileको लाइव लेकिन बिना करने से यह, का उपयोग खेलना सुविधा 1.14 में जोड़ा
JENKINS-33925 एक स्वचालित परीक्षण ढांचे के लिए वांछित ट्रैक करता है।
मेरे पास एक समाधान है जो मेरे लिए अच्छा काम करता है। इसमें डॉक में चलने वाली एक स्थानीय जेनकींस और प्रत्येक प्रतिबद्ध पर स्थानीय जेनकींस में पाइपलाइन को चालू करने के लिए एक गिट वेब हुक शामिल है। अब आपको पाइपलाइन का परीक्षण करने के लिए अपने गिटब या बिटबकेट रिपॉजिटरी पर धकेलने की आवश्यकता नहीं है।
यह केवल एक Linux वातावरण में परीक्षण किया गया है।
यह काम करना काफी सरल है, हालांकि यह निर्देश काफी लंबा है। ज्यादातर कदम वहीं हैं।
अपने चयन के स्थान पर Dockerfile नामक एक फ़ाइल बनाएँ। मैं इसे /opt/docker/jenkins/Dockerfileइसके साथ भरने के लिए दे रहा हूं :
FROM jenkins/jenkins:lts
USER root
RUN apt-get -y update && apt-get -y upgrade
# Your needed installations goes here
USER jenkins
स्थानीय_जेनकिंस छवि बनाएँ
यह आपको केवल एक बार या उसके बाद करने की आवश्यकता होगी जब आपने डॉकरीफाइल में कुछ जोड़ा हो।
$ docker build -t local_jenkins /opt/docker/jenkins/
स्थानीय_जेनकिंस शुरू और पुनः आरंभ करें
समय-समय पर आप जेनकिंस को आसानी से शुरू और पुनः आरंभ करना चाहते हैं। जैसे आपकी मशीन के रिबूट के बाद। इसके लिए मैंने .bash_aliasesअपने घर के फोल्डर में एक उपनाम बनाया है ।
$ echo "alias localjenkinsrestart='docker stop jenkins;docker rm jenkins;docker run --name jenkins -i -d -p 8787:8080 -p 50000:50000 -v /opt/docker/jenkins/jenkins_home:/var/jenkins_home:rw local_jenkins'" >> ~/.bash_aliases
$ source .bash_aliases # To make it work
सुनिश्चित करें कि /opt/docker/jenkins/jenkins_homeफ़ोल्डर मौजूद है और आपके पास उपयोगकर्ता इसे पढ़ने और लिखने के अधिकार हैं।
अपने जेनकींस को केवल टाइप करने या फिर से शुरू करने के लिए:
$ localjenkinsrestart
आप अपने स्थानीय जेनकींस में जो कुछ भी करते हैं उसे फ़ोल्डर / ऑप्ट / डॉक / जेनकिंस / जेनकिंस_होम में संग्रहीत किया जाएगा और पुनरारंभ के बीच संरक्षित किया जाएगा।
अपने docker jenkins में ssh एक्सेस कुंजी बनाएँ
यह काम करने के लिए एक बहुत ही महत्वपूर्ण हिस्सा है। पहले हम डॉकटर कंटेनर शुरू करते हैं और इसके लिए एक बैश शेल बनाते हैं:
$ localjenkinsrestart
$ docker exec -it jenkins /bin/bash
अब आप डॉकटर कंटेनर में प्रवेश कर चुके हैं, यह आप jenkins@e7b23bad10aa:/$अपने टर्मिनल में कुछ देख सकते हैं । @ के बाद हैश निश्चित रूप से भिन्न होगा।
कुंजी बनाएँ
jenkins@e7b23bad10aa:/$ ssh-keygen
जब तक आपको शीघ्र वापस नहीं मिल जाता है, तब तक सभी प्रश्नों पर एंटर दबाएं
अपने कंप्यूटर की कुंजी कॉपी करें। डॉकटर कंटेनर के भीतर से आपका कंप्यूटर 172.17.0.1 है जिसे आपको आश्चर्य होना चाहिए।
jenkins@e7b23bad10aa:/$ ssh-copy-id user@172.17.0.1
उपयोगकर्ता = आपका उपयोगकर्ता नाम और 172.17.0.1 docker कंटेनर में से आपके कंप्यूटर का IP पता है।
आपको इस बिंदु पर अपना पासवर्ड लिखना होगा।
अब डॉक कंटेनर के भीतर से अपने कंप्यूटर पर ssh-ing द्वारा लूप को पूरा करने का प्रयास करें।
jenkins@e7b23bad10aa:/$ ssh user@172.17.0.1
इस बार आपको पासवर्ड दर्ज करने की आवश्यकता नहीं है। यदि आप करते हैं, तो कुछ गलत हो गया और आपको फिर से प्रयास करना होगा।
अब आप अपने कंप्यूटर होम फोल्डर में होंगे। प्रयत्नls और एक नज़र है।
यहाँ से मत रोको क्योंकि हमारे पास ssh गोले की एक श्रृंखला है जिसे हमें बाहर निकलने की आवश्यकता है।
$ exit
jenkins@e7b23bad10aa:/$ exit
सही! अब हम वापस आ गए हैं और इसे जारी रखने के लिए तैयार हैं।
अपने जेनकींस स्थापित करें
आप अपने स्थानीय जेनकींस को अपने ब्राउज़र में http: // localhost: 8787 पर पाएंगे ।
पहली बार जब आप अपने ब्राउज़र को अपने स्थानीय जेनकींस से इंगित करते हैं तो आपका इंस्टॉलेशन विज़ार्ड के साथ हो जाएगा। डिफ़ॉल्ट ठीक हैं, सुनिश्चित करें कि आपने सेटअप के दौरान पाइपलाइन प्लगइन स्थापित किया है।
अपने जेनकींस सेट करें
यह बहुत महत्वपूर्ण है कि आप http: // localhost: 8787 / configSecurity पर मैट्रिक्स आधारित सुरक्षा को सक्रिय करें और अपने आप को मैट्रिक्स में जोड़कर और सभी बक्से को टिक कर सभी अधिकार दें। (सबसे दाईं ओर एक टिक-ऑल-बॉक्स आइकन है)
Jenkins’ own user databaseसुरक्षा क्षेत्र के रूप में चुनेंMatrix-based securityप्राधिकरण अनुभाग में चयन करेंUser/group to add:और [ Add ]बटन पर क्लिक करेंPrevent Cross Site Request Forgery exploitsअनियंत्रित है। (चूँकि यह जेनकींस केवल आपके कंप्यूटर से उपलब्ध है, इसलिए यह इतनी बड़ी बात नहीं है)[ Save ]जेनकिंस पर लॉग इन करें और लॉग आउट करें और फिर से यह सुनिश्चित करने के लिए कि यह काम करता है।
यदि यह आपको शुरू से शुरू नहीं करना है और /opt/docker/jenkins/jenkins_homeपुनः आरंभ करने से पहले फ़ोल्डर को खाली करना हैगिट उपयोगकर्ता जोड़ें
हमें अपने गिट हुक को न्यूनतम अधिकारों के साथ अपने स्थानीय जेनकींस में प्रवेश करने की अनुमति देने की आवश्यकता है। बस नौकरियों को देखना और निर्माण करना पर्याप्त है। इसलिए हम gitपासवर्ड के साथ एक उपयोगकर्ता बनाते हैंlogin ।
अपने ब्राउज़र को http: // localhost: 8787 / securityRealm / addUser पर निर्देशित करें और gitउपयोगकर्ता नाम और loginपासवर्ड के रूप में जोड़ें । पर क्लिक करें [ Create User ]।
Git उपयोगकर्ता के अधिकार जोड़ें
पर जाएं 8787 / configureSecurity: http: // स्थानीय होस्ट आपके ब्राउज़र में पेज। मैट्रिक्स में git उपयोगकर्ता जोड़ें:
gitफील्ड में लिखें User/group to add:और क्लिक करें[ Add ]अब यह समय है कि गिट उपयोगकर्ता के लिए न्यूनतम अधिकारों के लिए बक्से की जांच की जाए। केवल इन की जरूरत है:
सुनिश्चित करें कि Prevent Cross Site Request Forgery exploitsचेकबॉक्स अनियंत्रित है और उस पर क्लिक करें[ Save ]
हम मानते हैं कि हमारे पास उपयोगकर्ता नाम है userऔर इसमें हमारे git सक्षम प्रोजेक्ट Jenkinsfileको बुलाया गया है projectऔर यह स्थित है/home/user/projects/project
अपने http: // लोकलहोस्ट: 8787 जेनकींस में एक नई पाइपलाइन परियोजना जोड़ें। मैंने इसे संदर्भ के लिए हुकपिपलाइन नाम दिया।
New Itemजेनकिंस मेनू में क्लिक करेंhookpipeline[ OK ]Poll SCMबिल्ड ट्रिगर अनुभाग में चेकबॉक्स पर टिक करें । शेड्यूल को खाली छोड़ दें।Pipeline script from SCMRepository URLक्षेत्र में प्रवेशuser@172.17.0.1:projects/project/.gitScript Pathक्षेत्र में प्रवेशJenkinsfile/home/user/projects/project/.git/hooksफ़ोल्डर में जाएं और post-commitइसमें एक फाइल बनाएं , जिसमें यह हो:
#!/bin/sh
BRANCHNAME=$(git rev-parse --abbrev-ref HEAD)
MASTERBRANCH='master'
curl -XPOST -u git:login http://localhost:8787/job/hookpipeline/build
echo "Build triggered successfully on branch: $BRANCHNAME"
इस फ़ाइल को निष्पादित करें:
$ chmod +x /home/user/projects/project/.git/hooks/post-commit
पोस्ट-कमिट हुक का परीक्षण करें:
$ /home/user/projects/project/.git/hooks/post-commit
जेनकींस में जांचें कि क्या आपके हुकपिपलाइन प्रोजेक्ट को ट्रिगर किया गया था।
अंत में अपनी परियोजना में कुछ मनमाना परिवर्तन करें, परिवर्तन जोड़ें और एक वचनबद्ध करें। यह अब आपके स्थानीय जेनकींस में पाइपलाइन को ट्रिगर करेगा।
खुशी के दिन!
docker build -t local_jenkins /opt/docker/jenkins/Dockerfileसाथ प्रतिस्थापित करना पड़ा docker build -t local_jenkins /opt/docker/jenkinsक्योंकि डॉकर ने "संदर्भ तैयार करने में असमर्थ: संदर्भ एक निर्देशिका होना चाहिए" के बारे में शिकायत की।
$ docker inspect jenkins | grep Gateway
ssh user@docker.for.mac.localhost IP पते का उपयोग करने के बजाय इसे करना चाहिए । यह भी सुनिश्चित करें कि आपने macOs से रिमोट लॉगिन सुविधा को सक्षम किया है सिस्टम वरीयताएँ -> साझा फ़ोल्डर मेनू
टी एल; डॉ
लंबे संस्करण
जेनकिंस पाइपलाइन परीक्षण एक दर्द के अधिक से अधिक हो जाता है। क्लासिक घोषणात्मक नौकरी कॉन्फ़िगरेशन दृष्टिकोण के विपरीत, जहां उपयोगकर्ता सीमित था कि यूआई ने नई जेनकींस पाइपलाइन को उजागर किया, निर्माण प्रक्रिया के लिए एक पूर्ण विकसित प्रोग्रामिंग भाषा है जहां आप अपने स्वयं के कोड के साथ घोषणात्मक भाग को मिलाते हैं। अच्छे डेवलपर्स के रूप में हम इस तरह के कोड के लिए कुछ यूनिट टेस्ट भी करवाना चाहते हैं।
जेनकिंस पाइपलाइन विकसित करते समय आपको तीन चरणों का पालन करना चाहिए। चरण 1 का उपयोग करता है के मामलों के 80% को कवर करना चाहिए।
उदाहरण
PipelineUnit GitHub रेपो उपयोग के बारे में कुछ स्पॉक उदाहरण दिए गए हैं जेनकींस पाइपलाइन इकाई परीक्षण रूपरेखा
जेनकिन्स में एक 'रीप्ले' फीचर है, जो बिना स्रोतों को अपडेट किए आपको जल्दी से नौकरी फिर से करने में सक्षम बनाता है:
ब्लू ओशन प्लगइन के साथ लेखन (जुलाई 2017 के अंत) के क्षण में आप विज़ुअल एडिटर में सीधे एक घोषणात्मक पाइपलाइन के सिंटैक्स की जांच कर सकते हैं । संपादक, ब्लू ओशन यूआई से काम करता है जब आप केवल जीथब प्रोजेक्ट्स के लिए "कॉन्फ़िगर" पर क्लिक करते हैं (यह एक ज्ञात मुद्दा है और वे इसे जीआईटी आदि पर भी काम करने के लिए काम कर रहे हैं)।
लेकिन, जैसा कि इस सवाल में बताया गया है कि आप संपादक को ब्राउजिंग खोल सकते हैं:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
फिर पृष्ठ के मध्य में क्लिक करें, और दबाएं Ctrl+S, इससे एक टेक्स्टारिया खुल जाएगा जहां आप एक पाइपलाइन घोषणात्मक स्क्रिप्ट पेस्ट कर सकते हैं। जब आप अपडेट पर क्लिक करते हैं , अगर कोई सिंटैक्स त्रुटि होती है, तो संपादक आपको बताएगा कि सिंटैक्स त्रुटि कहां है। इस स्क्रीनशॉट की तरह:
यदि कोई सिंटैक्स त्रुटि नहीं है, तो टेक्सारिया बंद हो जाएगा और पृष्ठ आपकी पाइपलाइन की कल्पना करेगा। चिंता न करें कि यह कुछ भी नहीं बचाएगा (यदि यह एक गीथब प्रोजेक्ट है तो यह जेनकिंसफाइल परिवर्तन होगा)।
मैं जेनकिंस के लिए नया हूं और यह काफी मददगार है, इसके बिना मुझे कई बार जेनकिंसफाइल करना पड़ा, जब तक कि यह काम नहीं करता (बहुत कष्टप्रद!)। उम्मीद है की यह मदद करेगा। चीयर्स।
पार्टी में थोड़ा देर हो गई, लेकिन इसीलिए मैंने लिखा jenny, कुछ कोर जेनकिंसफाइल स्टेप्स का एक छोटा सा पुन: कार्यान्वयन। ( https://github.com/bmustiata/jenny )
जहां तक मुझे पता है कि यह पाइपलाइन प्लगइन नई जेनकिंसफाइल यांत्रिकी का "इंजन" है, तो आप काफी सकारात्मक रूप से इसका उपयोग कर सकते हैं ताकि आप स्थानीय रूप से अपनी स्क्रिप्ट का परीक्षण कर सकें।
मुझे यकीन नहीं है कि जब आप जेनकिन्सफाइल में इसे कॉपी करते हैं तो कोई अतिरिक्त कदम की आवश्यकता होती है, हालांकि सिंटैक्स आदि बिल्कुल समान होना चाहिए।
संपादित करें: "इंजन" पर संदर्भ मिला, इस सुविधा का विवरण, अंतिम पैराग्राफ, पहली प्रविष्टि देखें।
मेरे विकास सेटअप में - एक उचित ग्रूवी संपादक को गायब करना - जेनकिंसफाइल मुद्दों का एक बड़ा सौदा सरल वाक्यविन्यास त्रुटियों से उत्पन्न होता है । इस समस्या से निपटने के लिए, आप जेनकिंसफाइल को अपने जेनकिन्स उदाहरण (चल रहा है $JENKINS_HTTP_URL) के खिलाफ मान्य कर सकते हैं :
curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate
उपरोक्त कमांड https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line से थोड़ा संशोधित संस्करण है
इसके अलावा रिप्ले की विशेषता है कि अन्य लोगों ने पहले ही उल्लेख किया है (इसकी उपयोगिता पर डिट्टो!), मैंने पाया कि निम्नलिखित उपयोगी हैं:
अपनी SSH कुंजी को अपने जेनकींस प्रोफ़ाइल में रखें, फिर निम्न के रूप में घोषणापत्र का उपयोग करें :
ssh jenkins.hostname.here declarative-linter < Jenkinsfile
यह आपके जेनकिंसफाइल पर एक स्थिर विश्लेषण करेगा। अपनी पसंद के संपादक में, एक कीबोर्ड शॉर्टकट परिभाषित करें जो स्वचालित रूप से उस कमांड को चलाता है। विज़ुअल स्टूडियो कोड में, जो मैं उपयोग करता हूं, कार्य पर जाएं> कार्य कॉन्फ़िगर करें, फिर एक मान्य Jenkinsfile कमांड बनाने के लिए निम्न JSON का उपयोग करें :
{
"version": "2.0.0",
"tasks": [
{
"label": "Validate Jenkinsfile",
"type": "shell",
"command": "ssh jenkins.hostname declarative-linter < ${file}"
}
]
}
मैं फिर से खेलना भविष्य का उपयोग कर रहा हूं, कुछ अपडेट करने और जल्दी से चलाने के लिए।
कुछ सीमाओं के साथ और स्क्रिप्टेड पाइपलाइनों के लिए मैं इस समाधान का उपयोग करता हूं:
node('master') {
stage('Run!') {
def script = load('...you job file...')
}
}
def execute() {
... main job code here ...
}
execute()