मैं स्थानीय रूप से जेनकिंसफाइल में किए गए बदलाव का परीक्षण कैसे कर सकता हूं?


210

जेनकींस पाइपलाइनों को लिखते समय यह देखने के लिए कि क्या यह काम करता है, प्रत्येक नए परिवर्तन को करने के लिए बहुत असुविधाजनक लगता है।

क्या कोड को प्रतिबद्ध किए बिना इन को स्थानीय रूप से निष्पादित करने का एक तरीका है?

जवाबों:


139

आप पाइपलाइन स्क्रिप्ट को स्थानीय रूप से निष्पादित नहीं कर सकते, क्योंकि इसका पूरा उद्देश्य जेनकिंस को स्क्रिप्ट करना है। (जो एक कारण है कि अपने Jenkinsfileशॉर्ट और कोड को सीमित रखना सबसे अच्छा है, जो वास्तव में जेनकींस की विशेषताओं से संबंधित है; आपके वास्तविक बिल्ड लॉजिक को बाहरी प्रक्रियाओं से बनाया जाना चाहिए या उन उपकरणों का निर्माण करना चाहिए जिन्हें आप एक-लाइन shया batचरण के माध्यम से लागू करते हैं ।)

आप के लिए एक परिवर्तन परीक्षण करना चाहते हैं Jenkinsfileको लाइव लेकिन बिना करने से यह, का उपयोग खेलना सुविधा 1.14 में जोड़ा

JENKINS-33925 एक स्वचालित परीक्षण ढांचे के लिए वांछित ट्रैक करता है।


ब्लॉग पोस्ट में कहा गया है कि 'रीप्ले' बटन है। कोई विचार कहाँ? मैं इसका पता नहीं लगा सकता।
बोल्ट्जमैनब्रैन

8
@BoltzmannBrain, अपनी बिल्ड जॉब के जेनकिंस पेज पर जाएं। बाईं ओर आपको पिछले बिल्ड रन की सूची देखनी चाहिए। जब आप एक बिल्ड रन आईडी (जैसे "# 123") पर हॉवर करते हैं या बिल्ड रन की तारीख, थोड़ा नीचे तीर दिखाई देता है। इस पर क्लिक करने से एक संदर्भ मेनू का पता चलता है जिसमें विकल्प "रिप्ले" होता है। विकल्प बिल्ड रन के पृष्ठ पर भी उपलब्ध है।
गुड नाईट नर्ड प्राइड

2
कॉनकोर्स आपको अपने स्थानीय स्क्रिप्ट को एक टारगेट बिल्ड सर्वर के खिलाफ निष्पादित करने की अनुमति देता है, इसलिए आप यह सत्यापित कर सकते हैं कि यह वास्तव में आपके परिवर्तनों को करने से पहले रिमोट सर्वर पर भी काम करेगा। concourse.ci/fly-cli.html । जेनकींस रीप्ले फ़ीचर कुछ हद तक इसके अनुरूप है, क्योंकि इसमें सीमाएँ हैं और आपको इसे फिर से बनाने के लिए पहले एक बिल्ड बनाना होगा।
mdo123

2
आप इस परियोजना पर एक नज़र डाल सकते हैं, जिसका उद्देश्य वह है जो आप देख रहे हैं।
रोमेन

1
JenkinsPipelineUnit ( github.com/jenkinsci/JenkinsPipelineUnit ) पर एक नज़र डालें
user864279

78

मेरे पास एक समाधान है जो मेरे लिए अच्छा काम करता है। इसमें डॉक में चलने वाली एक स्थानीय जेनकींस और प्रत्येक प्रतिबद्ध पर स्थानीय जेनकींस में पाइपलाइन को चालू करने के लिए एक गिट वेब हुक शामिल है। अब आपको पाइपलाइन का परीक्षण करने के लिए अपने गिटब या बिटबकेट रिपॉजिटरी पर धकेलने की आवश्यकता नहीं है।

यह केवल एक Linux वातावरण में परीक्षण किया गया है।

यह काम करना काफी सरल है, हालांकि यह निर्देश काफी लंबा है। ज्यादातर कदम वहीं हैं।

यह वही चीज़ है जिसकी आपको आवश्यकता है

  • डॉकर स्थापित और काम कर रहा है। यह इस निर्देश का हिस्सा नहीं है।
  • स्थानीय रूप से डॉक में एक जेनकींस चल रहा है। नीचे कैसे समझाया।
    • आपके स्थानीय जेनकिन्स डॉक उपयोगकर्ता के लिए उचित अधिकार (ssh एक्सेस की) आपके स्थानीय गिट रेपो से खींचने के लिए। नीचे कैसे समझाया।
    • जेनकिंस पाइपलाइन परियोजना जो आपके स्थानीय गिट रिपॉजिटरी से खींचती है। नीचे समझाया गया।
    • आपके स्थानीय जेनकींस में न्यूनतम अधिकारों के साथ एक git उपयोगकर्ता। नीचे समझाया गया।
  • पोस्ट-कमिट वेब हुक के साथ एक git प्रोजेक्ट जो पाइपलाइन प्रोजेक्ट को ट्रिगर करता है। नीचे समझाया गया।

इसे आपको इसी तरह करना होगा

जेनकिन्स डोकर

अपने चयन के स्थान पर 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 SCM
    • में Repository URLक्षेत्र में प्रवेशuser@172.17.0.1:projects/project/.git
    • में Script 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क्योंकि डॉकर ने "संदर्भ तैयार करने में असमर्थ: संदर्भ एक निर्देशिका होना चाहिए" के बारे में शिकायत की।
एटिने नीवु

1
मुझे मैक में यह त्रुटि आ रही है। क्या कोई इस पर मेरी मदद कर सकता है? >> ERROR: ssh: होस्ट से जुड़ने के लिए 172.17.0.1 पोर्ट 22: कनेक्शन ने मना कर दिया -
मनोज श्रेष्ठ

@ManojShrestha: आईपी 172.17.0.1 मशीन डॉक कंटेनर चलाने वाली मशीन के लिए डिफ़ॉल्ट आईपी है। आप इसके बजाय अपनी मशीनों (मैक: एस) आईपी का उपयोग कर सकते हैं।
javabeangrinder

@ManojShrestha: आप इस तरह से अपने सेटअप के गेटवे आईपी का भी पता लगाने की कोशिश कर सकते हैं: $ docker inspect jenkins | grep Gateway
javabeangrinder

2
यदि आपका docker होस्ट macOS पर स्थापित है और आप docker कंटेनर से इसे ssh लॉगइन करना चाहते हैं तो आपको ssh user@docker.for.mac.localhost IP पते का उपयोग करने के बजाय इसे करना चाहिए । यह भी सुनिश्चित करें कि आपने macOs से रिमोट लॉगिन सुविधा को सक्षम किया है सिस्टम वरीयताएँ -> साझा फ़ोल्डर मेनू
पाओलो एंग्लूटी

60

टी एल; डॉ

लंबे संस्करण
जेनकिंस पाइपलाइन परीक्षण एक दर्द के अधिक से अधिक हो जाता है। क्लासिक घोषणात्मक नौकरी कॉन्फ़िगरेशन दृष्टिकोण के विपरीत, जहां उपयोगकर्ता सीमित था कि यूआई ने नई जेनकींस पाइपलाइन को उजागर किया, निर्माण प्रक्रिया के लिए एक पूर्ण विकसित प्रोग्रामिंग भाषा है जहां आप अपने स्वयं के कोड के साथ घोषणात्मक भाग को मिलाते हैं। अच्छे डेवलपर्स के रूप में हम इस तरह के कोड के लिए कुछ यूनिट टेस्ट भी करवाना चाहते हैं।

जेनकिंस पाइपलाइन विकसित करते समय आपको तीन चरणों का पालन करना चाहिए। चरण 1 का उपयोग करता है के मामलों के 80% को कवर करना चाहिए।

  1. लिपियों के निर्माण में यथासंभव अधिक करें (जैसे। मेवेन, ग्रैडल, गुलप आदि)। फिर आपकी पाइपलाइन स्क्रिप्ट में बिल्ड कार्यों को सही क्रम में कॉल करता है। बिल्ड पाइपलाइन सिर्फ ऑर्केस्ट्रेट्स का निर्माण करती है और बिल्ड कार्यों को निष्पादित करती है लेकिन इसमें कोई बड़ा तर्क नहीं होता है जिसे एक विशेष परीक्षण की आवश्यकता होती है।
  2. यदि पिछले नियम को पूरी तरह से लागू नहीं किया जा सकता है, तो पाइपलाइन साझा लाइब्रेरी पर जाएं, जहां आप अपने दम पर कस्टम लॉजिक को विकसित और परीक्षण कर सकते हैं और उन्हें पाइपलाइन में एकीकृत कर सकते हैं।
  3. यदि उपरोक्त सभी आपको विफल करते हैं, तो आप उन पुस्तकालयों में से एक की कोशिश कर सकते हैं जो हाल ही में (मार्च -2017) आए थे। जेनकिंस पाइपलाइन यूनिट टेस्टिंग फ्रेमवर्क या पाइपलाइन यूनाइट (उदाहरण)। 2018 के बाद से जेनकिंसफाइल रनर भी है , जो कमांड लाइन टूल से जेनकिंस पाइपलाइन को निष्पादित करने के लिए एक पैकेज है।

उदाहरण

PipelineUnit GitHub रेपो उपयोग के बारे में कुछ स्पॉक उदाहरण दिए गए हैं जेनकींस पाइपलाइन इकाई परीक्षण रूपरेखा


1
क्या आप उन दो पुस्तकालयों की संक्षिप्त तुलना भी शामिल कर सकते हैं?
सोरिन

23

जेनकिन्स में एक 'रीप्ले' फीचर है, जो बिना स्रोतों को अपडेट किए आपको जल्दी से नौकरी फिर से करने में सक्षम बनाता है:

फिर से खेलना सुविधा


1
ध्यान दें कि यह बिल्ड पेज पर दिखाई देता है, प्रोजेक्ट या ब्रांच पेज पर नहीं।
ArtOfWarfare 15

17

ब्लू ओशन प्लगइन के साथ लेखन (जुलाई 2017 के अंत) के क्षण में आप विज़ुअल एडिटर में सीधे एक घोषणात्मक पाइपलाइन के सिंटैक्स की जांच कर सकते हैं । संपादक, ब्लू ओशन यूआई से काम करता है जब आप केवल जीथब प्रोजेक्ट्स के लिए "कॉन्फ़िगर" पर क्लिक करते हैं (यह एक ज्ञात मुद्दा है और वे इसे जीआईटी आदि पर भी काम करने के लिए काम कर रहे हैं)।

लेकिन, जैसा कि इस सवाल में बताया गया है कि आप संपादक को ब्राउजिंग खोल सकते हैं:

[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/

फिर पृष्ठ के मध्य में क्लिक करें, और दबाएं Ctrl+S, इससे एक टेक्स्टारिया खुल जाएगा जहां आप एक पाइपलाइन घोषणात्मक स्क्रिप्ट पेस्ट कर सकते हैं। जब आप अपडेट पर क्लिक करते हैं , अगर कोई सिंटैक्स त्रुटि होती है, तो संपादक आपको बताएगा कि सिंटैक्स त्रुटि कहां है। इस स्क्रीनशॉट की तरह:

एक त्वरित परीक्षा के रूप में मैंने "कदम" के बजाय गलत तरीके से "स्टेप्स" टाइप किया।

यदि कोई सिंटैक्स त्रुटि नहीं है, तो टेक्सारिया बंद हो जाएगा और पृष्ठ आपकी पाइपलाइन की कल्पना करेगा। चिंता न करें कि यह कुछ भी नहीं बचाएगा (यदि यह एक गीथब प्रोजेक्ट है तो यह जेनकिंसफाइल परिवर्तन होगा)।

मैं जेनकिंस के लिए नया हूं और यह काफी मददगार है, इसके बिना मुझे कई बार जेनकिंसफाइल करना पड़ा, जब तक कि यह काम नहीं करता (बहुत कष्टप्रद!)। उम्मीद है की यह मदद करेगा। चीयर्स।


2
ऐसा इसलिए है क्योंकि 2017 तक, जेनकिंस का लक्ष्य अभी भी पॉइंट-एंड-क्लिक सॉफ़्टवेयर इंजीनियरों की समस्याओं को संबोधित करना है;) .... कम से कम एटम में एक अच्छा ग्रूवी लिंटर है। केवल ग्रूवी है लेकिन यह मदद करता है।
सोरिन

सिंटैक्स हाइलाइटिंग वाला संपादक क्लासिक जेनकींस यूआई का भी हिस्सा है।
वडिमो

6

पार्टी में थोड़ा देर हो गई, लेकिन इसीलिए मैंने लिखा jenny, कुछ कोर जेनकिंसफाइल स्टेप्स का एक छोटा सा पुन: कार्यान्वयन। ( https://github.com/bmustiata/jenny )


कोई अपराध नहीं है, लेकिन जब तक आप अपने सामान को लगातार अपडेट नहीं कर रहे हैं, तब तक यह बहुत बेकार हो जाएगा क्योंकि पाइपलाइन सिंटैक्स प्रवाह की एक निरंतर स्थिति में है जो इस समय लगता है।
क्रैड

नहीं लिया। अब तक जो मैंने देखा है, वह पाइपलाइन सिंटैक्स, यह बुनियादी पाइपलाइन चरणों ( jenkins.io/doc/pipeline/steps/workflow-basic-steps ) के लिए बहुत मानकीकृत है । मैं इसे ~ 2 साल के लिए उपयोग कर रहा हूं, बिना किसी पिछड़े असंगत परिवर्तन के बिना। जेनकिन्स प्लगइन्स का उपयोग imho नहीं किया जाना चाहिए, और बदलते एपीआई को साझा पुस्तकालयों में कस्टम कमांड का उपयोग करके अमूर्त किया जा सकता है, जहां आपके पास एपीआई की गारंटी होगी। यदि आप घोषणात्मक वाक्यविन्यास के बारे में बात कर रहे हैं, तो यह सच हो सकता है। मैं अपनी पाइपलाइनों में केवल प्रोग्राम एपीआई का उपयोग करता हूं, और यही जेनी का समर्थन करता है। रॉक सॉलिड :)
bogdan.mustiata

5

जहां तक ​​मुझे पता है कि यह पाइपलाइन प्लगइन नई जेनकिंसफाइल यांत्रिकी का "इंजन" है, तो आप काफी सकारात्मक रूप से इसका उपयोग कर सकते हैं ताकि आप स्थानीय रूप से अपनी स्क्रिप्ट का परीक्षण कर सकें।

मुझे यकीन नहीं है कि जब आप जेनकिन्सफाइल में इसे कॉपी करते हैं तो कोई अतिरिक्त कदम की आवश्यकता होती है, हालांकि सिंटैक्स आदि बिल्कुल समान होना चाहिए।

संपादित करें: "इंजन" पर संदर्भ मिला, इस सुविधा का विवरण, अंतिम पैराग्राफ, पहली प्रविष्टि देखें।


5

मेरे विकास सेटअप में - एक उचित ग्रूवी संपादक को गायब करना - जेनकिंसफाइल मुद्दों का एक बड़ा सौदा सरल वाक्यविन्यास त्रुटियों से उत्पन्न होता है । इस समस्या से निपटने के लिए, आप जेनकिंसफाइल को अपने जेनकिन्स उदाहरण (चल रहा है $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 से थोड़ा संशोधित संस्करण है


4
यह सिर्फ एक ऐसी चीज है जिसकी मैं तलाश कर रहा था - दुर्भाग्य से यह केवल घोषणात्मक पाइपलाइनों के लिए काम करता है न कि स्क्रिप्टेड पाइपलाइनों के लिए :(
thom_nic

2

इसके अलावा रिप्ले की विशेषता है कि अन्य लोगों ने पहले ही उल्लेख किया है (इसकी उपयोगिता पर डिट्टो!), मैंने पाया कि निम्नलिखित उपयोगी हैं:

  1. एक परीक्षण पाइपलाइन नौकरी बनाएं जहां आप पाइपलाइन कोड में टाइप कर सकते हैं या किसी चीज़ को जल्दी से परखने के लिए अपने रेपो / जेनकिनफिल की शाखा को इंगित कर सकते हैं। अधिक सटीक परीक्षण के लिए, एक मल्टीब्रांच पाइपलाइन का उपयोग करें जो आपके स्वयं के कांटे को इंगित करता है जहां आप जल्दी से परिवर्तन कर सकते हैं और ठेस को प्रभावित किए बिना प्रतिबद्ध कर सकते हैं। BRANCH_NAME env जैसी सामग्री केवल मल्टीब्रांच में उपलब्ध है।
  2. चूंकि जेनकिंसफाइल ग्रूवी कोड है, बस इसे सिंटेक्स सिनेमैक्स को मान्य करने के लिए "ग्रूवी जेनकिंसफाइल" के साथ लागू करें।

अलग-अलग नौकरियों का उपयोग करना जिन्हें आप छिपा सकते हैं और अपने उपयोगकर्ताओं को भ्रमित न करें सबसे महत्वपूर्ण चीजों में से एक है। मैं Jellikins फ़ाइलों को IntelliJ के साथ संपादित करता हूं। यह वाक्यविन्यास दोष दिखाने में काफी अच्छा है। हालाँकि, उत्तर बटन महत्वपूर्ण बात है। मैं मूल परिवर्तन चलाने के साथ एक शाखा बनाता हूं - यह आमतौर पर थोड़ा गलत होता है। मैं फिर जेनकिंसफाइल को संपादित करता हूं और कॉपी करता हूं और रिप्ले विंडो में पेस्ट करता हूं, और फिर से चलाता हूं - जब तक यह ठीक नहीं होता है तब तक मैं इसे दोहराता हूं और फिर काम करने वाले संस्करण को प्रतिबद्ध करता हूं।
जॉन्फो

1

अपनी 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}"
    }
  ]
}

0

मैं फिर से खेलना भविष्य का उपयोग कर रहा हूं, कुछ अपडेट करने और जल्दी से चलाने के लिए।


1
क्या आप इस कार्य को करने के बारे में कुछ और जानकारी प्रदान कर सकते हैं?
कोसनिक

1
मैं एक स्रोत प्रबंधक के रूप में बिट-बाल्टी का उपयोग कर रहा हूं, फिर मैंने जेनकिन्स पर एक परियोजना बनाई है, जो मेरे भंडार को स्वचालित रूप से खोजती है, मैं इस पोस्ट की सिफारिश करता हूं। मेरे रेपो जेनकिन्स wil पर प्रत्येक पुश के बाद स्वचालित रूप से मेरी जेनकिंस फ़ाइल चलाएं और यदि यह विफल हो जाता है, तो बाएं मेनू पर Replay नामक एक बटन होता है, ==> यह बटन आपकी Jenkins फ़ाइल वाले संपादक को खोलता है, आप इसे संपादित कर सकते हैं और नौकरी को पुनः चला सकते हैं। ,
अहमदद्रि

0

कुछ सीमाओं के साथ और स्क्रिप्टेड पाइपलाइनों के लिए मैं इस समाधान का उपयोग करता हूं:

  1. एक इनलाइन ग्रूवी स्क्रिप्ट के साथ पाइपलाइन नौकरी:

node('master') {
    stage('Run!') {
                def script = load('...you job file...')
    }
}

  1. परीक्षण के लिए जेनकिंसफाइल में घावों के समान संरचना है:

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