জেনকিন্সে রফতানি / আমদানির কাজ


267

2 টি আলাদা জেনকিনসের মধ্যে কি চাকরির বিনিময় সম্ভব? আমি রফতানি / আমদানি করার উপায় অনুসন্ধান করছি।


2
আপনার প্রশ্নের সরাসরি উত্তর নয় তবে কিছু সেরা অনুশীলন: জেনকিনস পাইপলাইন ডিএসএল এর সাথে আপনার কাজের কনফিগারেশনটি লেখার চেষ্টা করুন এবং এটিকে আপনার প্রকল্পের ভাণ্ডারের অংশ হিসাবে তৈরি করুন। এর মতো, একটি জেনকিন্স সার্ভার থেকে অন্যটিতে সহজেই চাকরীগুলি বহনযোগ্য। Github.com/jenkinsci/pipline-plugin/blob/master/TUTORIAL.md
মাইকেল লিহস

এ কিছু পরামর্শ stackoverflow.com/questions/38585734/... পাশাপাশি
বেন ভাঁজ-পড়া

উত্তর:


154

জেনকিন্সের বরং একটি ভাল উইকি রয়েছে, আপনি যখন সিআই সফ্টওয়্যারটিতে নতুন হন তখন পড়তে খুব কষ্ট হয় ...

সার্ভারগুলির মধ্যে চাকরি সরিয়ে নেওয়ার জন্য তারা একটি সহজ সমাধান সরবরাহ করে

কৌতুকটি সম্ভবত জেনকিনস কনফিগারেশন পৃষ্ঠা থেকে পুনরায় লোড করার প্রয়োজন ছিল।

2020.03.10 আপডেট করুন

জেনকিনসিসিআই ল্যান্ডস্কেপ অনেক বদলেছে ... আমি কিছুক্ষণের জন্য জব ডিএসএল ব্যবহার করছি । আমাদের কাছে একটি বীজ কাজ রয়েছে যা বাকী কাজগুলি জেনারেট করে।

এটি আমাদের যখনই প্রয়োজন জেনকিন্স সার্ভারের জন্য পুনরায় তৈরি বা সরানো উভয়কেই সহায়তা করে :) আপনি আরও বেশি রক্ষণাবেক্ষণের জন্য এই ফাইলগুলিকে সংস্করণও করতে পারেন!


22
তাহলে জেনকিনগুলি ইনস্টল থাকা সিস্টেমে আপনার অ্যাক্সেস দরকার? সুতরাং এটি সাধারণ ব্যবহারকারীদের জন্য কোনও উত্তর নয়।
ওয়াউটার শুট

নিশ্চিত হয়ে গেছে, ডকুমেন্ট যা বলে তাই প্রয়োগ করার পরে আপনার জেনকিন্স পুনরায় লোড করা দরকার।
মিগুয়েল অর্টিজ

180

সম্ভবত জেনকিন্স কমান্ড লাইন ব্যবহার করা অন্য বিকল্প, https://wiki.jenkins-ci.org/display/JENKINS/ জেনকিনস + সিএলআই দেখুন

  • create-job: কনফিগারেশন এক্সএমএল ফাইল হিসাবে স্টিডিন পড়ে একটি নতুন কাজ তৈরি করে।
  • গেট-জব: কাজের সংজ্ঞা এক্সএমএলকে স্টাডাউটে ফেলে দেয়

সুতরাং আপনি করতে পারেন

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

এটি আমার পক্ষে ভাল কাজ করে এবং আমি আমার সংস্করণ নিয়ন্ত্রণ সিস্টেমের ভিতরে সঞ্চয় করতে ব্যবহৃত


3
এটি কাজ করতে আপনার পুরানো সার্ভারে জাভা, নতুন সার্ভার এবং স্থানীয় মেশিনের একই সংস্করণ হওয়া দরকার। অন্যথায়, অদ্ভুত স্ট্রিম / সংস্করণ সমস্যা দেখা দেয়। আপনার jnlp পোর্টগুলিও খোলার দরকার।
মারাটসি

সিএলআই ক্লায়েন্টের পূর্ণ পথ হ'ল জেনকিনসহোম / ওয়ার / ওয়েব-আইএনএফ / জেনকিনস-ক্লিমেজার। জেনকিনসহোম জেনকিনসহোমের অবস্থান
রব

1
এই পদ্ধতিটিতে এক্সএমএলে খালি নগ্ন অ্যাম্পারস্যান্ডগুলি রয়েছে যেমন আপনার কখন গ্রোভি কোড রয়েছে issues
রব কিয়েল্টি

এক্সপোর্ট করা এক্সএমএলে আন-এনকোডেড এম্পারস্যান্ডগুলি গ্রোভি কোডে দেখা যেতে পারে যা অ্যাক্টিভ চয়েস প্লাগইন (আন-পছন্দ) পরামিতিগুলিকে ব্যাক করে; আমি পারলে সমাধান উপস্থাপন করবে।
রব কিয়েল্টি

1
নীচে আমার উত্তরে প্রস্তাবিত ঠিক মতো @ তথ্য_ইন্টারচেঞ্জ।
মারাটসি

151

একটি ওয়ানলাইনার:

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

1
কাজ করার জন্য প্রমাণীকরণের টোকেন দরকার, তবে স্টিল দুর্দান্ত কাজ!
ভাইরায়েড

7
curl -s http: // <USER>: <API_TOEKN> @ ওল্ড_ জেনকিনস / কাজ / জববিএনএম / কনফিগারেশন। এক্সএমএল | কার্ল-এক্স পোস্ট 'http: // <USER>: <API_TOEKN> @ NEW_JENKINS / createItem? নাম = JOBNAME' - শিরোনাম "বিষয়বস্তুর ধরণ: অ্যাপ্লিকেশন / এক্সএমএল" -d @ - <br/> থেকে ব্যবহারকারী এপিআই কী পান : জেনকিআইএস_উইউল / ব্যবহারকারী / <ইউএসআর / কনফিগার > এপিআই টোকেন> এপিআই টোকেন দেখান
সুহাস গায়কওয়াদ

1
এই মাত্র একটি অতিরিক্ত অবদান। টার্গেট সার্ভারে পোস্ট করার সময় আপনি সম্ভবত একটি ত্রুটি কোড এইচটিটিপি 403 পাওয়ার / আইটেমটি অ্যাক্সেস করতে সমস্যা পেতে পারেন। কারণ: অনুরোধটিতে কোনও বৈধ ক্রম্ব অন্তর্ভুক্ত ছিল না। লক্ষ্য জেনকিন্স সার্ভারের জন্য আপনাকে একটি সিএসআরএফ সুরক্ষা টোকেন তৈরি করতে হবে। : এই থ্রেড থেকে @Kenorb উপদেশ অনুসরণ stackoverflow.com/questions/38137760/...
Mig82

2
এমনকি কার্ল কমান্ডগুলি ব্যবহার করার প্রয়োজন নেই কারণ আপনি ফাইলটি http://OLD_JENKINS/job/JOBNAME/config.xmlদখল করতে আপনার ব্রাউজারের লিঙ্কটিতে যেতে পারেন config.xml
21:25

1
আপনি প্রয়োজন --data-binaryপরিবর্তে -dমধ্যে curlকমান্ড, কারণ -dআপনার স্ক্রিপ্টের মধ্যে হোয়াইটস্পেস আপ শক্তি জগাখিচুড়ি।
গ্যাবর সসরদি

24

জব ইম্পোর্ট প্লাগইন নামে একটি প্লাগইন রয়েছে যা আপনি যা খুঁজছেন তা হতে পারে। আমি এটি ব্যবহার করেছি। এটিতে কোনও সার্ভার থেকে প্রকল্প আমদানি করার সমস্যা রয়েছে যা বেনামে অ্যাক্সেসের অনুমতি দেয় না।

সম্পূর্ণতার জন্য: যদি আপনার উভয়ের কাছে কমান্ড লাইন অ্যাক্সেস থাকে তবে আপনি ইতিমধ্যে খেজ দ্বারা মুভিং, অনুলিপি এবং জেনকিন্স জবসের নামকরণের জন্য উল্লিখিত পদ্ধতিটি করতে পারেন ।


আমি বিশ্বাস করি না এটি বর্তমানে কনফিগারেশন ব্যতীত অন্য কিছু সরায়।
জর্নার্নি

14

আপনার জেনকিন্স সার্ভারের প্রথম পৃষ্ঠায় যান, পৃষ্ঠার নীচে REST এপিআইতে ক্লিক করুন:

কাজ তৈরি করুন

একটি নতুন কাজ তৈরি করতে, config.xmlক্যোয়ারী প্যারামিটার সহ এই URL এ পোস্ট করুন name=JOBNAME। আপনাকে একটি Content-Type: application/xmlহেডার পাঠাতে হবে । 200তৈরিটি সফল হলে আপনি স্থিতি কোড পাবেন , বা 4xx/5xxব্যর্থ হলে কোড পাবেন। config.xmlজেনকিন্স ফাইল সিস্টেমে প্রকল্পটি সংরক্ষণ করতে ব্যবহার করে এমন ফর্ম্যাট, যাতে আপনি সেগুলির উদাহরণ জেনকিন্স হোম ডিরেক্টরিতে দেখতে পারেন বা থেকে বিদ্যমান কাজের এক্সএমএল কনফিগারেশন পুনরুদ্ধার করে /job/JOBNAME/config.xml


13

আমার জেনকিন্স উদাহরণে (সংস্করণ 1.548) কনফিগারেশন ফাইলটি এখানে রয়েছে:

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

জেনকিন্স ব্যবহারকারী এবং জেনকিন্স গ্রুপের মালিকানায় 644 অনুমতি রয়েছে permission ফাইলটি এখান থেকে অনুলিপি করার কাজ করা উচিত। আমি এটিকে সরাসরি পরিবর্তন করার চেষ্টা করিনি তবে প্রকল্পটি আবার সেটআপ করার প্রয়োজনে এই জায়গা থেকে কনফিগারটিকে ব্যাক-আপ করেছি।


1
উইন্ডোজেC:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
সাশা বন্ড

8

অন্য জেনকিন্স উদাহরণ থেকে কাজ আমদানির সহজ উপায় হ'ল জব ইম্পোর্ট প্লাগইন । কেবল উত্স জেনকিন্স উদাহরণের URL সরবরাহ করা প্রয়োজন need রিমোট জেনকিন্স ইউআরএল নিম্নলিখিত ধরণের যে কোনও ইউআরএল নিতে পারে:

  • http://$JENKINS - দূরবর্তী উদাহরণে সমস্ত কাজ পান

  • http://$JENKINS/job/$JOBNAME - একটি একক কাজ পান

  • http://$JENKINS/view/$VIEWNAME - একটি নির্দিষ্ট দৃষ্টিতে সমস্ত কাজ পান


6

ল্যারি ক্যায়ের উত্তরের জন্য ধন্যবাদ আমি আমার জেনকিন্সের সমস্ত কাজের ব্যাকআপ নেওয়ার জন্য একটি স্ক্রিপ্ট তৈরি করতে সক্ষম হয়েছি। আমি এমন একটি কাজ তৈরি করেছি যা প্রতি সপ্তাহে এটি চালায়। যদি কেউ এটি দরকারী মনে করে তবে তা এখানে:

#!/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


4

জেনকিন্স একটি ডিরেক্টরিতে কাজ রফতানি করে

 #! /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

2

উইন্ডোজ বিশ্বে আমাদের মধ্যে যারা বাশ উপলভ্য বা নাও থাকতে পারে তাদের জন্য এখানে আমার কাটু এবং ল্যারি কাইয়ের পদ্ধতির পাওয়ারশেল বন্দর রয়েছে । আশা করি এটি কাউকে সাহায্য করবে।

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

2

প্লাগিনের নামটি ডাউনলোড করা খুব সহজ

কাজের আমদানি প্লাগইন

আপনার রিমোট জেনকিন্স সার্ভারের URL লিখুন এবং এটি স্বয়ংক্রিয়ভাবে কাজগুলি আমদানি করবে


1
এটি কিছু জন্য কাজ করতে পারে, কিন্তু আমার জন্য না। এটি কেবল তখনই কাজ করে যদি নতুন জেনকিন্সের উদাহরণটিতে পুরানো জেনকিন্সের দৃষ্টিতে সরাসরি অ্যাক্সেস থাকে। খনি দুটি ভিন্ন নেটওয়ার্কে ছিল।
জাস্টিন ডোমনিটজ

1

সরল পিএইচপি স্ক্রিপ্ট আমার জন্য কাজ করেছিল।

রপ্তানি:

// 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);
}


1

মেশিনে সরাসরি অ্যাক্সেসের সাথে সর্বাধিক সহজ উপায় হ'ল প্রথম জেনকিনগুলি থেকে অন্য একটিতে কাজের ফোল্ডারটি অনুলিপি করা (আপনি ওয়ার্কস্পেসগুলি - workspaceফোল্ডার বাদ দিতে পারেন ), কারণ পুরো কাজের কনফিগারেশনটি ডিস্কের এক্সএমএল ফাইলে সঞ্চিত থাকে।

তারপরে নতুন জেনকিনগুলিতে কেবলমাত্র reload configurationবিশ্বব্যাপী সেটিংসে (অ্যাডমিন অ্যাক্সেস প্রয়োজন) যথেষ্ট হওয়া উচিত, যদি না হয় তবে আপনাকে জেনকিনস সরঞ্জামটি পুনরায় চালু করতে হবে।

আর একটি উপায় এই পোস্টের উপরে উল্লিখিত প্লাগইন ব্যবহার করা যেতে পারে।

সম্পাদনা করুন: - আপনি সম্ভবত modulesফোল্ডারগুলিও বাদ দিতে পারেন


0

ম্যানুয়ালি চাকরী আমদানি করা: বিকল্প উপায়

কাজের উপর গিটকে (সংস্করণ নিয়ন্ত্রণ) আপলোড করুন মূলত কাজের কনফিগারেশন.এক্সএমএল আপলোড করুন।

যদি লিনাক্স সার্ভারগুলি:

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

জেনকিন্স পুনরায় চালু করুন


0

ওয়েব ব্যবহারকারী হিসাবে, আপনি জব কনফিগার হিস্ট্রি এ গিয়ে এক্সএমএল রফতানি করে রফতানি করতে পারেন।

আমি জেনকিন্স মেশিনটিতে অ্যাক্সেস না পেয়ে এমন পরিস্থিতিতে রয়েছি এবং ব্যাকআপ হিসাবে রফতানি করতে চাইছিলাম।

ওয়েব ব্যবহারকারী হিসাবে এক্সএমএল আমদানির বিষয়ে, আমি এখনও জানতে চাই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.