jenkins - जेनकींस में निर्यात/आयात नौकरियां




भारतात आयात होणाऱ्या वस्तू (10)

अपने जेनकींस सर्वर के सामने वाले पृष्ठ पर जाएं, पृष्ठ के निचले हिस्से में REST API पर क्लिक करें:

नौकरी बनाएं

एक नई नौकरी बनाने के लिए, क्वेरी पैरामीटर name=JOBNAME साथ इस यूआरएल में config.xml पोस्ट करें। आपको Content-Type: application/xml हेडर भेजने की आवश्यकता है। सृजन सफल होने पर आपको 200 स्थिति कोड मिलेगा, या 4xx/5xx कोड विफल होने पर आपको मिलेगा। config.xml प्रारूप जेनकिंस फ़ाइल सिस्टम में प्रोजेक्ट को संग्रहीत करने के लिए उपयोग करता है, ताकि आप जेनकिंस होम निर्देशिका में उनके उदाहरण देख सकें, या मौजूदा जॉब की XML कॉन्फ़िगरेशन /job/JOBNAME/config.xml से /job/JOBNAME/config.xml कर /job/JOBNAME/config.xml

क्या 2 अलग जेनकींस के बीच नौकरियों का आदान-प्रदान करना संभव है? मैं नौकरी निर्यात / आयात करने का एक तरीका खोज रहा हूं।


एक लाइनर:

$ 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_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 @-


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

वे सर्वर के बीच नौकरियों को स्थानांतरित करने के लिए एक सरल समाधान प्रदान करते हैं

चाल शायद जेनकींस कॉन्फ़िगरेशन पेज से कॉन्फ़िगर को पुनः लोड करने की आवश्यकता थी।


नौकरियों को मैन्युअल रूप से आयात करना: वैकल्पिक तरीका

जॉब ऑन गिट (संस्करण नियंत्रण) अपलोड करें मूल रूप से नौकरी के config.xml अपलोड करें।

यदि लिनक्स सर्वर:

cd /var/lib/jenkins/jobs/<Job name> 
Download the config.xml from Git

जेनकींस को पुनरारंभ करें


मेरे जेनकींस इंस्टेंस (संस्करण 1.548) में कॉन्फ़िगरेशन फ़ाइल यहां है:

/var/lib/jenkins/jobs/-the-project-name-/config.xml

644 अनुमतियों के साथ जेनकिंस उपयोगकर्ता और जेनकिंस समूह द्वारा स्वामित्व। फ़ाइल को यहां से और यहां से कॉपी करना काम करना चाहिए। मैंने इसे सीधे बदलने की कोशिश नहीं की है, लेकिन परियोजना को फिर से स्थापित करने की आवश्यकता होने पर इस स्थान से कॉन्फ़िगरेशन का बैक अप लिया है।


यह मौजूदा नौकरियों के लिए काम नहीं करता है, हालांकि जेनकींस जॉब बिल्डर है

यह किसी को यमल फाइलों में और एक गिट रेपो में नौकरी परिभाषा रखने की अनुमति देता है जो बहुत पोर्टेबल है।


विंडोज़ दुनिया में हमारे लिए जो बैश उपलब्ध हो सकता है या नहीं भी हो सकता है, यहां काटू और लैरी काई के दृष्टिकोण का मेरा पावरशेल बंदरगाह है। उम्मीद है कि यह किसी की मदद करता है।

##### 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"

शायद जेनकिंस कमांड लाइन का उपयोग एक और विकल्प है, https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

  • निर्माण-कार्य: कॉन्फ़िगरेशन XML फ़ाइल के रूप में stdin को पढ़कर एक नया काम बनाता है।
  • नौकरी पाने के लिए: नौकरी परिभाषा एक्सएमएल stdout डंप

तो आप कर सकते हैं

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

यह मेरे लिए ठीक काम करता है और मुझे अपने संस्करण नियंत्रण प्रणाली के अंदर स्टोर करने के लिए उपयोग किया जाता है


जॉब आयात प्लगइन नामक एक प्लगइन है जो आप जो खोज रहे हैं वह हो सकता है। मैंने इसका इस्तेमाल किया है इसमें ऐसे सर्वर से परियोजनाओं को आयात करने में समस्याएं हैं जो अज्ञात पहुंच की अनुमति नहीं देती हैं।

पूर्णता के लिए: यदि आपके पास दोनों के लिए कमांड लाइन एक्सेस है, तो आप जेनकिन्स जॉब्स को मूविंग, कॉपी और नाम बदलने के लिए पहले से ही खेज़ द्वारा उल्लिखित प्रक्रिया कर सकते हैं।


जॉब आयात प्लगइन एक और जेनकींस उदाहरण से नौकरियों को आयात करने का आसान तरीका है। बस जेनकिन्स उदाहरण स्रोत के यूआरएल प्रदान करने की जरूरत है। रिमोट जेनकींस यूआरएल निम्न में से किसी भी यूआरएल को ले सकता है:

  • http://$JENKINS - दूरस्थ उदाहरण पर सभी नौकरियां प्राप्त करें

  • http://$JENKINS/job/$JOBNAME - एक ही नौकरी प्राप्त करें

  • http://$JENKINS/view/$VIEWNAME - किसी विशेष दृश्य में सभी नौकरियां प्राप्त करें





jenkins