Bukan secara langsung jawaban atas pertanyaan Anda tetapi beberapa praktik terbaik: cobalah untuk menulis konfigurasi pekerjaan Anda dengan Jenkins Pipeline DSL dan menjadikannya bagian dari repositori proyek Anda. Seperti itu, pekerjaannya mudah dibawa-bawa dari satu server Jenkins ke yang lain. Lihat github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md
Triknya mungkin adalah kebutuhan untuk memuat ulang konfigurasi dari Halaman Konfigurasi Jenkins.
Pembaruan 2020.03.10
Lansekap JenkinsCI telah banyak berubah ... Saya telah menggunakan Job DSL untuk sementara waktu sekarang. Kami memiliki SEED Job yang menghasilkan sisa pekerjaan.
Ini membantu kami untuk membuat ulang atau pindah ke server Jenkins kapan pun diperlukan :) Anda juga dapat membuat versi file-file tersebut untuk lebih mudah dirawat!
Agar ini berfungsi, java di server lama, server baru, dan mesin lokal Anda harus memiliki versi yang sama. Jika tidak, muncul masalah aliran / versi yang aneh. Port jnlp Anda juga harus terbuka.
MaratC
Path lengkap ke klien CLI adalah JENKINS_HOME / war / WEB-INF / jenkins-cli.jar di mana JENKINS_HOME adalah lokasi JENKINS_HOME
Rob Kielty
1
Metode ini memiliki masalah dengan ampersand telanjang telanjang di XML seperti ketika Anda memiliki & dalam kode Groovy.
Rob Kielty
ampersand yang tidak disandikan dalam XML yang diekspor dapat terjadi dalam kode Groovy yang mendukung parameter Plugin Pilihan Aktif (tidak terpilih); akan menghadirkan solusi jika saya bisa.
Rob Kielty
1
@information_interchange persis seperti yang diusulkan dalam jawaban saya di bawah ini.
Perlu token autentikasi agar berfungsi, tetapi menghasilkan pekerjaan yang bagus!
Viroide
7
curl -s http: // <USER>: <API_TOEKN> @ OLD_JENKINS / job / JOBNAME / config.xml | curl -X POST 'http: // <USER>: <API_TOEKN> @ NEW_JENKINS / createItem? name = JOBNAME' --header "Type-Type: application / xml" -d @ - <br/> Dapatkan kunci API Pengguna dari : JENKIS_URL / user / <USER> / configure > Token API> Tampilkan Token API
Suhas Gaikwad
1
Hanya satu kontribusi tambahan untuk ini. Ketika POSTing ke server target Anda cenderung mendapatkan kode kesalahan HTTP 403 Masalah mengakses / membuat Item. Alasan: Tidak ada remah yang valid yang termasuk dalam permintaan. Anda harus membuat token perlindungan CSRF untuk server Jenkins target. Ikuti saran dari @Kenorb dari utas ini: stackoverflow.com/questions/38137760/…
Mig82
2
Bahkan tidak perlu menggunakan perintah ikal karena Anda bisa pergi ke http://OLD_JENKINS/job/JOBNAME/config.xmltautan di browser Anda untuk mengambil config.xmlfile.
entpnerd
1
Anda perlu --data-binarybukannya -ddalam curlperintah, karena -dmungkin mengacaukan spasi putih di skrip Anda.
Gabor Csardi
24
Ada plugin bernama Job Import Plugin yang mungkin Anda cari. Saya sudah menggunakannya. Itu memang memiliki masalah dengan mengimpor proyek dari server yang tidak memungkinkan akses anonim.
Saya tidak percaya saat ini bergerak selain konfigurasi.
jwernerny
14
Buka halaman depan server Jenkins Anda, klik REST API di bagian bawah halaman:
Buat Pekerjaan
Untuk membuat pekerjaan baru, poskan config.xmlke URL ini dengan parameter kueri name=JOBNAME. Anda harus mengirim Content-Type: application/xmltajuk. Anda akan mendapatkan 200kode status jika pembuatannya berhasil, atau 4xx/5xxkode jika gagal. config.xmladalah format yang digunakan Jenkins untuk menyimpan proyek dalam sistem file, sehingga Anda dapat melihat contohnya di direktori home Jenkins, atau dengan mengambil konfigurasi XML dari pekerjaan yang ada /job/JOBNAME/config.xml.
Dimiliki oleh pengguna jenkins dan grup jenkins dengan 644 izin. Menyalin file ke dan dari sini seharusnya berfungsi. Saya belum mencoba mengubahnya secara langsung tetapi telah mencadangkan konfigurasi dari tempat ini jika proyek perlu diatur kembali.
di WindowsC:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Sasha Bond
8
Plugin Impor Pekerjaan adalah cara mudah di sini untuk mengimpor pekerjaan dari instance Jenkins lain. Hanya perlu memberikan URL sumber Jenkins contoh. URL Remote Jenkins dapat mengambil salah satu dari jenis-jenis URL berikut:
http://$JENKINS - dapatkan semua pekerjaan pada instance jarak jauh
http://$JENKINS/job/$JOBNAME - dapatkan satu pekerjaan
http://$JENKINS/view/$VIEWNAME - dapatkan semua pekerjaan dalam tampilan tertentu
Berkat jawaban Larry Cai, saya berhasil membuat skrip untuk mencadangkan semua pekerjaan Jenkins saya. Saya menciptakan pekerjaan yang menjalankan ini setiap minggu. Jika seseorang menemukan itu berguna, ini dia:
#!/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
#! /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
Impor pekerjaan
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
Bagi kita di dunia Windows yang mungkin atau mungkin tidak memiliki Bash, inilah port PowerShell saya dari Katu dan Larry Cai . Semoga ini bisa membantu seseorang.
##### 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-ItemTypeDirectory-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-ItemTypeDirectory-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-Level9-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"
Ini mungkin bekerja untuk beberapa orang, tetapi tidak untuk saya. Ini hanya berfungsi jika instance Jenkins baru memiliki akses langsung ke instance Jenkins lama. Milik saya berada di dua jaringan yang berbeda.
Justin Domnitz
1
Script php sederhana bekerja untuk saya.
Ekspor:
// 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);
}
Impor:
<?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);
}
Cara paling mudah, dengan akses langsung ke mesin adalah menyalin folder pekerjaan dari jenkins pertama ke yang lain (Anda dapat mengecualikan ruang kerja - workspacefolder), karena seluruh konfigurasi pekerjaan disimpan dalam file xml pada disk.
Lalu di jenkins baru saja reload configuration di pengaturan global (akses admin diperlukan) harus cukup, jika tidak, maka Anda perlu me-restart alat Jenkins.
Cara lain dapat menggunakan plugin yang disebutkan di atas posting ini.
edit: - jika Anda mungkin juga dapat mengecualikan modulesfolder
Jawaban:
Jenkins memiliki wiki yang cukup bagus, meskipun sulit dibaca ketika Anda baru mengenal perangkat lunak CI ...
Mereka menawarkan solusi sederhana untuk memindahkan pekerjaan antar server
Triknya mungkin adalah kebutuhan untuk memuat ulang konfigurasi dari Halaman Konfigurasi Jenkins.
Pembaruan 2020.03.10
Lansekap JenkinsCI telah banyak berubah ... Saya telah menggunakan Job DSL untuk sementara waktu sekarang. Kami memiliki SEED Job yang menghasilkan sisa pekerjaan.
Ini membantu kami untuk membuat ulang atau pindah ke server Jenkins kapan pun diperlukan :) Anda juga dapat membuat versi file-file tersebut untuk lebih mudah dirawat!
sumber
Mungkin menggunakan jenkins command line adalah opsi lain, lihat https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
Jadi kamu bisa melakukannya
Ini berfungsi dengan baik untuk saya dan saya terbiasa menyimpan di dalam sistem kontrol versi saya
sumber
Satu kalimat:
Dengan otentikasi:
Dengan Crumb, jika CSRF aktif ( lihat detailnya di sini ):
Menjadi remah dengan:
Oleskan remah dengan
-H CRUMB
:sumber
http://OLD_JENKINS/job/JOBNAME/config.xml
tautan di browser Anda untuk mengambilconfig.xml
file.--data-binary
bukannya-d
dalamcurl
perintah, karena-d
mungkin mengacaukan spasi putih di skrip Anda.Ada plugin bernama Job Import Plugin yang mungkin Anda cari. Saya sudah menggunakannya. Itu memang memiliki masalah dengan mengimpor proyek dari server yang tidak memungkinkan akses anonim.
Untuk Kelengkapan: Jika Anda memiliki akses baris perintah ke keduanya, Anda dapat melakukan prosedur yang telah disebutkan oleh Khez untuk Memindahkan, Menyalin, dan Mengganti Nama Pekerjaan Jenkins .
sumber
Buka halaman depan server Jenkins Anda, klik REST API di bagian bawah halaman:
Untuk membuat pekerjaan baru, poskan
config.xml
ke URL ini dengan parameter kueriname=JOBNAME
. Anda harus mengirimContent-Type: application/xml
tajuk. Anda akan mendapatkan200
kode status jika pembuatannya berhasil, atau4xx/5xx
kode jika gagal.config.xml
adalah format yang digunakan Jenkins untuk menyimpan proyek dalam sistem file, sehingga Anda dapat melihat contohnya di direktori home Jenkins, atau dengan mengambil konfigurasi XML dari pekerjaan yang ada/job/JOBNAME/config.xml
.sumber
Dalam contoh Jenkins saya (versi 1.548) file konfigurasi di:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
Dimiliki oleh pengguna jenkins dan grup jenkins dengan 644 izin. Menyalin file ke dan dari sini seharusnya berfungsi. Saya belum mencoba mengubahnya secara langsung tetapi telah mencadangkan konfigurasi dari tempat ini jika proyek perlu diatur kembali.
sumber
C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Plugin Impor Pekerjaan adalah cara mudah di sini untuk mengimpor pekerjaan dari instance Jenkins lain. Hanya perlu memberikan URL sumber Jenkins contoh. URL Remote Jenkins dapat mengambil salah satu dari jenis-jenis URL berikut:
http://$JENKINS
- dapatkan semua pekerjaan pada instance jarak jauhhttp://$JENKINS/job/$JOBNAME
- dapatkan satu pekerjaanhttp://$JENKINS/view/$VIEWNAME
- dapatkan semua pekerjaan dalam tampilan tertentusumber
Berkat jawaban Larry Cai, saya berhasil membuat skrip untuk mencadangkan semua pekerjaan Jenkins saya. Saya menciptakan pekerjaan yang menjalankan ini setiap minggu. Jika seseorang menemukan itu berguna, ini dia:
sumber
Dalam kunjungan browser web:
Simpan saja file ke disk Anda.
sumber
Jenkins mengekspor pekerjaan ke direktori
Impor pekerjaan
sumber
Bagi kita di dunia Windows yang mungkin atau mungkin tidak memiliki Bash, inilah port PowerShell saya dari Katu dan Larry Cai . Semoga ini bisa membantu seseorang.
sumber
Sangat mudah hanya mengunduh nama plugin
Plugin Impor Pekerjaan
Masukkan URL server Remote Jenkins Anda dan itu akan mengimpor pekerjaan secara otomatis
sumber
Script php sederhana bekerja untuk saya.
Ekspor:
Impor:
sumber
Ini tidak bekerja untuk pekerjaan yang ada, namun ada pembangun pekerjaan Jenkins .
Ini memungkinkan seseorang untuk menyimpan definisi pekerjaan dalam file yaml dan repo git yang sangat portabel.
sumber
Cara paling mudah, dengan akses langsung ke mesin adalah menyalin folder pekerjaan dari jenkins pertama ke yang lain (Anda dapat mengecualikan ruang kerja -
workspace
folder), karena seluruh konfigurasi pekerjaan disimpan dalam file xml pada disk.Lalu di jenkins baru saja
reload configuration
di pengaturan global (akses admin diperlukan) harus cukup, jika tidak, maka Anda perlu me-restart alat Jenkins.Cara lain dapat menggunakan plugin yang disebutkan di atas posting ini.
edit: - jika Anda mungkin juga dapat mengecualikan
modules
foldersumber
Mengimpor Pekerjaan Secara Manual: Cara alternatif
Unggah Pekerjaan ke Git (Kontrol Versi) Pada dasarnya unggah config.xml dari Pekerjaan.
Jika Server Linux:
Nyalakan kembali Jenkins
sumber
Sebagai pengguna web, Anda dapat mengekspor dengan masuk ke Job Config History, lalu mengekspor XML.
Saya dalam situasi tidak memiliki akses ke mesin Jenkins berjalan dan ingin diekspor sebagai cadangan.
Sedangkan untuk mengimpor xml sebagai pengguna web, saya masih ingin tahu.
sumber