क्या 2 अलग जेनकींस के बीच नौकरियों का आदान-प्रदान संभव है? मैं नौकरियों को निर्यात / आयात करने का तरीका खोज रहा हूं।
क्या 2 अलग जेनकींस के बीच नौकरियों का आदान-प्रदान संभव है? मैं नौकरियों को निर्यात / आयात करने का तरीका खोज रहा हूं।
जवाबों:
जेनकिन्स के पास एक अच्छा विकी है, यद्यपि जब आप सीआई सॉफ्टवेयर में नए होते हैं तो पढ़ना मुश्किल होता है ...
वे सर्वर के बीच नौकरियों के लिए एक सरल समाधान प्रदान करते हैं
ट्रिक शायद जेनकिंस कॉन्फ़िगरेशन पेज से कॉन्फ़िगरेशन को फिर से लोड करने की आवश्यकता थी।
अद्यतन 2020.03.10
JenkinsCI परिदृश्य बहुत बदल गया है ... मैं थोड़ी देर के लिए जॉब डीएसएल का उपयोग कर रहा हूं । हमारे पास एक SEED जॉब है जो बाकी नौकरियों को उत्पन्न करता है।
यह जरूरत पड़ने पर जेनकींस सर्वर के लिए दोनों को फिर से बनाने या स्थानांतरित करने में मदद करता है :) आप और भी अधिक स्थिरता के लिए उन फाइलों को भी संस्करणित कर सकते हैं!
संभवतः जेनकिंस कमांड लाइन का उपयोग एक और विकल्प है, https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI देखें
तो आप कर सकते हैं
java -jar jenkins-cli.jar -s http://server get-job myjob > myjob.xml
java -jar jenkins-cli.jar -s http://server create-job newmyjob < myjob.xml
यह मेरे लिए ठीक काम करता है और मुझे मेरे संस्करण नियंत्रण प्रणाली के अंदर स्टोर करने के लिए उपयोग किया जाता है
एक-लाइनर:
$ curl -s http://OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST 'http://NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
प्रमाणीकरण के साथ:
$ curl -s http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST 'http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
Crumb के साथ, यदि CSRF सक्रिय है ( विवरण यहां देखें ):
के साथ टुकड़े टुकड़े हो जाओ:
$ CRUMB_OLD=$(curl -s 'http://<USER>:<API_TOKEN>@OLD_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
$ CRUMB_NEW=$(curl -s 'http://<USER>:<API_TOKEN>@NEW_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
के साथ टुकड़ा लागू करें -H CRUMB
:
$ curl -s -H $CRUMB_OLD http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST -H $CRUMB_NEW 'http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
http://OLD_JENKINS/job/JOBNAME/config.xml
को हथियाने के लिए अपने ब्राउज़र में लिंक पर जा सकते हैं config.xml
।
--data-binary
के बजाय -d
में curl
आदेश है, क्योंकि -d
अपनी स्क्रिप्ट में खाली स्थान के ऊपर हो सकता है गड़बड़।
वहाँ एक प्लगइन है जो नौकरी आयात प्लगइन कहा जाता है कि आप के लिए क्या देख रहे हो सकता है। मैंने इसका इस्तेमाल किया है। यह एक सर्वर से परियोजनाओं के आयात के साथ समस्या है जो अनाम पहुँच की अनुमति नहीं देता है।
संपूर्णता के लिए: यदि आपके पास दोनों के लिए कमांड लाइन का उपयोग है, तो आप हिलाने, कॉपी करने और जेनकींस जॉब्स के नामकरण के लिए पहले से ही उल्लिखित प्रक्रिया कर सकते हैं ।
अपने जेनकींस सर्वर के फ्रंट पेज पर जाएं, पेज के नीचे REST API पर क्लिक करें:
नौकरी बनाएँ
एक नया काम बनाने के लिए, config.xml
इस URL को क्वेरी पैरामीटर के साथ पोस्ट करें name=JOBNAME
। आपको Content-Type: application/xml
हेडर भेजने की आवश्यकता है । 200
सृजन सफल होने पर, या 4xx/5xx
विफल होने पर कोड आपको स्थिति कोड मिलेगा । config.xml
फ़ाइल सिस्टम में प्रोजेक्ट को संग्रहीत करने के लिए जेनकिन्स का उपयोग करने वाला प्रारूप है, इसलिए आप जेनकींस होम डायरेक्टरी में उनके उदाहरण देख सकते हैं, या मौजूदा नौकरियों के XML कॉन्फ़िगरेशन को पुनः प्राप्त कर सकते हैं /job/JOBNAME/config.xml
।
मेरे जेनकींस उदाहरण (संस्करण 1.548) में विन्यास फाइल इस प्रकार है:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
644 अनुमतियों के साथ jenkins उपयोगकर्ता और jenkins समूह के स्वामित्व में। फ़ाइल को यहाँ और यहाँ से कॉपी करना चाहिए। मैंने इसे सीधे बदलने की कोशिश नहीं की है, लेकिन परियोजना को फिर से सेटअप करने की आवश्यकता होने पर इस स्थान से कॉन्फ़िगरेशन का बैकअप लिया है।
C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
जॉब इम्पोर्ट प्लगइन एक अन्य जेनकिंस उदाहरण से नौकरी आयात करने का आसान तरीका है। बस स्रोत जेनरिक उदाहरण का URL प्रदान करने की आवश्यकता है। रिमोट जेनकिंस URL किसी भी प्रकार के URL ले सकता है:
http://$JENKINS
- सभी नौकरियों को दूरस्थ उदाहरण पर प्राप्त करें
http://$JENKINS/job/$JOBNAME
- एक ही काम मिलता है
http://$JENKINS/view/$VIEWNAME
- सभी नौकरियों को एक विशेष दृष्टिकोण में प्राप्त करें
लैरी कै के जवाब की बदौलत मैं अपने सभी जेनकिंस नौकरियों का बैकअप बनाने के लिए एक स्क्रिप्ट बनाने में कामयाब रहा। मैंने एक ऐसी नौकरी बनाई जो हर हफ्ते चलती है। यदि कोई इसे उपयोगी पाता है, तो यह है:
#!/bin/bash
#IFS for jobs with spaces.
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ list-jobs);
do
java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ get-job ${i} > ${i}.xml;
done
IFS=$SAVEIFS
mkdir deploy
tar cvfj "jenkins-jobs.tar.bz2" ./*.xml
एक वेब ब्राउज़र की यात्रा में:
http://[jenkinshost]/job/[jobname]/config.xml
बस फ़ाइल को अपनी डिस्क पर सहेजें।
जेनकिन्स एक डायरेक्टरी को जॉब एक्सपोर्ट करता है
#! /bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
declare -i j=0
for i in $(java -jar jenkins-cli.jar -s http://server:8080/jenkins list-jobs --username **** --password ***);
do
let "j++";
echo $j;
if [ $j -gt 283 ] // If you have more jobs do it in chunks as it will terminate in the middle of the process. So Resume your job from where it ends.
then
java -jar jenkins-cli.jar -s http://lxvbmcbma:8080/jenkins get-job --username **** --password **** ${i} > ${i}.xml;
echo "done";
fi
done
आयात का काम
for f in *.xml;
do
echo "Processing ${f%.*} file.."; //truncate the .xml extention and load the xml file for job creation
java -jar jenkins-cli.jar -s http://server:8080/jenkins create-job ${f%.*} < $f
done
विंडोज दुनिया में हम में से उन लोगों के लिए जो बैश उपलब्ध हो सकते हैं या नहीं हो सकते हैं, यहां पर मेरा पावरशेल पोर्ट ऑफ काटू और लैरी कै का दृष्टिकोण है। आशा है कि यह किसी की मदद करता है।
##### Config vars #####
$serverUri = 'http://localhost:8080/' # URI of your Jenkins server
$jenkinsCli = 'C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar' # Path to jenkins-cli.jar on your machine
$destFolder = 'C:\Jenkins Backup\' # Output folder (will be created if it doesn't exist)
$destFile = 'jenkins-jobs.zip' # Output filename (will be overwritten if it exists)
########################
$work = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())
New-Item -ItemType Directory -Force -Path $work | Out-Null # Suppress output noise
echo "Created a temp working folder: $work"
$jobs = (java -jar $jenkinsCli -s $serverUri list-jobs)
echo "Found $($jobs.Length) existing jobs: [$jobs]"
foreach ($j in $jobs)
{
$outfile = Join-Path $work "$j.xml"
java -jar $jenkinsCli -s $serverUri get-job $j | Out-File $outfile
}
echo "Saved $($jobs.Length) jobs to temp XML files"
New-Item -ItemType Directory -Force -Path $destFolder | Out-Null # Suppress output noise
echo "Found (or created) $destFolder folder"
$destPath = Join-Path $destFolder $destFile
Get-ChildItem $work -Filter *.xml |
Write-Zip -Level 9 -OutputPath $destPath -FlattenPaths |
Out-Null # Suppress output noise
echo "Copied $($jobs.Length) jobs to $destPath"
Remove-Item $work -Recurse -Force
echo "Removed temp working folder"
यह बहुत आसान है बस प्लगइन नाम डाउनलोड करें
अपने रिमोट जेनकिंस सर्वर का URL दर्ज करें और यह स्वचालित रूप से नौकरियों को आयात करेगा
सरल php स्क्रिप्ट ने मेरे लिए काम किया।
निर्यात:
// add all job codes in the array
$jobs = array("job1", "job2", "job3");
foreach ($jobs as $value)
{
fwrite(STDOUT, $value. " \n") or die("Unable to open file!");
$path = "http://server1:8080/jenkins/job/".$value."/config.xml";
$myfile = fopen($value.".xml", "w");
fwrite($myfile, file_get_contents($path));
fclose($myfile);
}
आयात:
<?php
// add all job codes in the array
$jobs = array("job1", "job2", "job3");
foreach ($arr as $value)
{
fwrite(STDOUT, $value. " \n") or die("Unable to open file!");
$cmd = "java -jar jenkins-cli.jar -s http://server2:8080/jenkins/ create-job ".$value." < ".$value.".xml";
echo exec($cmd);
}
यह मौजूदा नौकरियों के लिए काम नहीं करता है, हालांकि जेनकिंस जॉब बिल्डर है ।
यह एक को yaml फाइलों में और एक git रेपो में काम की परिभाषा रखने की अनुमति देता है जो बहुत पोर्टेबल है।
मशीन के सीधे उपयोग के साथ सबसे आसान तरीका है, नौकरी फ़ोल्डर को पहले जेनकिन्स से दूसरे एक में कॉपी करना (आप कार्यक्षेत्र - workspace
फ़ोल्डर को बाहर कर सकते हैं ), क्योंकि डिस्क पर xml फ़ाइल में पूरे नौकरी कॉन्फ़िगरेशन को संग्रहीत किया जाता है।
फिर नए जेनकींस में ही reload configuration
वैश्विक सेटिंग्स में (एडमिन एक्सेस की आवश्यकता है) पर्याप्त होना चाहिए, यदि नहीं, तो आपको जेनकिंस टूल को पुनरारंभ करना होगा।
एक अन्य तरीका इस पोस्ट के ऊपर वर्णित प्लगइन्स का उपयोग कर सकता है।
संपादित करें: - मामले में आप शायद modules
फ़ोल्डरों को भी बाहर कर सकते हैं
इंपोर्टिंग जॉब्स मैन्युअल रूप से: वैकल्पिक तरीका
जॉब्स को Git (संस्करण नियंत्रण) पर अपलोड करें मूल रूप से जॉब के config.xml को अपलोड करें।
यदि लिनक्स सर्वर:
cd /var/lib/jenkins/jobs/<Job name>
Download the config.xml from Git
जेनकींस को फिर से शुरू करें
एक वेब उपयोगकर्ता के रूप में, आप नौकरी कॉन्फ़िगरेशन इतिहास पर जाकर निर्यात कर सकते हैं, फिर एक्सएमएल निर्यात कर सकते हैं।
मैं मशीन तक पहुंच नहीं होने की स्थिति में हूं, जेनकिंस चल रहा है और बैकअप के रूप में निर्यात करना चाहता था।
वेब उपयोगकर्ता के रूप में xml आयात करने के लिए, मैं अभी भी जानना चाहूंगा।