2 টি আলাদা জেনকিনসের মধ্যে কি চাকরির বিনিময় সম্ভব? আমি রফতানি / আমদানি করার উপায় অনুসন্ধান করছি।
2 টি আলাদা জেনকিনসের মধ্যে কি চাকরির বিনিময় সম্ভব? আমি রফতানি / আমদানি করার উপায় অনুসন্ধান করছি।
উত্তর:
জেনকিন্সের বরং একটি ভাল উইকি রয়েছে, আপনি যখন সিআই সফ্টওয়্যারটিতে নতুন হন তখন পড়তে খুব কষ্ট হয় ...
সার্ভারগুলির মধ্যে চাকরি সরিয়ে নেওয়ার জন্য তারা একটি সহজ সমাধান সরবরাহ করে
কৌতুকটি সম্ভবত জেনকিনস কনফিগারেশন পৃষ্ঠা থেকে পুনরায় লোড করার প্রয়োজন ছিল।
2020.03.10 আপডেট করুন
জেনকিনসিসিআই ল্যান্ডস্কেপ অনেক বদলেছে ... আমি কিছুক্ষণের জন্য জব ডিএসএল ব্যবহার করছি । আমাদের কাছে একটি বীজ কাজ রয়েছে যা বাকী কাজগুলি জেনারেট করে।
এটি আমাদের যখনই প্রয়োজন জেনকিন্স সার্ভারের জন্য পুনরায় তৈরি বা সরানো উভয়কেই সহায়তা করে :) আপনি আরও বেশি রক্ষণাবেক্ষণের জন্য এই ফাইলগুলিকে সংস্করণও করতে পারেন!
সম্ভবত জেনকিন্স কমান্ড লাইন ব্যবহার করা অন্য বিকল্প, https://wiki.jenkins-ci.org/display/JENKINS/ জেনকিনস + সিএলআই দেখুন
সুতরাং আপনি করতে পারেন
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_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 এপিআইতে ক্লিক করুন:
কাজ তৈরি করুন
একটি নতুন কাজ তৈরি করতে, config.xml
ক্যোয়ারী প্যারামিটার সহ এই URL এ পোস্ট করুন name=JOBNAME
। আপনাকে একটি Content-Type: application/xml
হেডার পাঠাতে হবে । 200
তৈরিটি সফল হলে আপনি স্থিতি কোড পাবেন , বা 4xx/5xx
ব্যর্থ হলে কোড পাবেন। config.xml
জেনকিন্স ফাইল সিস্টেমে প্রকল্পটি সংরক্ষণ করতে ব্যবহার করে এমন ফর্ম্যাট, যাতে আপনি সেগুলির উদাহরণ জেনকিন্স হোম ডিরেক্টরিতে দেখতে পারেন বা থেকে বিদ্যমান কাজের এক্সএমএল কনফিগারেশন পুনরুদ্ধার করে /job/JOBNAME/config.xml
।
আমার জেনকিন্স উদাহরণে (সংস্করণ 1.548) কনফিগারেশন ফাইলটি এখানে রয়েছে:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
জেনকিন্স ব্যবহারকারী এবং জেনকিন্স গ্রুপের মালিকানায় 644 অনুমতি রয়েছে permission ফাইলটি এখান থেকে অনুলিপি করার কাজ করা উচিত। আমি এটিকে সরাসরি পরিবর্তন করার চেষ্টা করিনি তবে প্রকল্পটি আবার সেটআপ করার প্রয়োজনে এই জায়গা থেকে কনফিগারটিকে ব্যাক-আপ করেছি।
C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
অন্য জেনকিন্স উদাহরণ থেকে কাজ আমদানির সহজ উপায় হ'ল জব ইম্পোর্ট প্লাগইন । কেবল উত্স জেনকিন্স উদাহরণের URL সরবরাহ করা প্রয়োজন need রিমোট জেনকিন্স ইউআরএল নিম্নলিখিত ধরণের যে কোনও ইউআরএল নিতে পারে:
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 লিখুন এবং এটি স্বয়ংক্রিয়ভাবে কাজগুলি আমদানি করবে
সরল পিএইচপি স্ক্রিপ্ট আমার জন্য কাজ করেছিল।
রপ্তানি:
// 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);
}
এটি বিদ্যমান কাজের জন্য কাজ করে না, তবে জেনকিন্সের চাকরির নির্মাতা রয়েছেন ।
এটি যমল ফাইলগুলিতে এবং গিট রেপোতে কাজের সংজ্ঞা রাখতে সক্ষম যা খুব বহনযোগ্য।
মেশিনে সরাসরি অ্যাক্সেসের সাথে সর্বাধিক সহজ উপায় হ'ল প্রথম জেনকিনগুলি থেকে অন্য একটিতে কাজের ফোল্ডারটি অনুলিপি করা (আপনি ওয়ার্কস্পেসগুলি - workspace
ফোল্ডার বাদ দিতে পারেন ), কারণ পুরো কাজের কনফিগারেশনটি ডিস্কের এক্সএমএল ফাইলে সঞ্চিত থাকে।
তারপরে নতুন জেনকিনগুলিতে কেবলমাত্র reload configuration
বিশ্বব্যাপী সেটিংসে (অ্যাডমিন অ্যাক্সেস প্রয়োজন) যথেষ্ট হওয়া উচিত, যদি না হয় তবে আপনাকে জেনকিনস সরঞ্জামটি পুনরায় চালু করতে হবে।
আর একটি উপায় এই পোস্টের উপরে উল্লিখিত প্লাগইন ব্যবহার করা যেতে পারে।
সম্পাদনা করুন: - আপনি সম্ভবত modules
ফোল্ডারগুলিও বাদ দিতে পারেন
ম্যানুয়ালি চাকরী আমদানি করা: বিকল্প উপায়
কাজের উপর গিটকে (সংস্করণ নিয়ন্ত্রণ) আপলোড করুন মূলত কাজের কনফিগারেশন.এক্সএমএল আপলোড করুন।
যদি লিনাক্স সার্ভারগুলি:
cd /var/lib/jenkins/jobs/<Job name>
Download the config.xml from Git
জেনকিন্স পুনরায় চালু করুন
ওয়েব ব্যবহারকারী হিসাবে, আপনি জব কনফিগার হিস্ট্রি এ গিয়ে এক্সএমএল রফতানি করে রফতানি করতে পারেন।
আমি জেনকিন্স মেশিনটিতে অ্যাক্সেস না পেয়ে এমন পরিস্থিতিতে রয়েছি এবং ব্যাকআপ হিসাবে রফতানি করতে চাইছিলাম।
ওয়েব ব্যবহারকারী হিসাবে এক্সএমএল আমদানির বিষয়ে, আমি এখনও জানতে চাই।