Cara memindahkan Jenkins dari satu PC ke PC lainnya

154

Saat ini saya menggunakan Jenkins di PC pengembangan saya. Saya menginstalnya di PC pengembangan saya, karena saya memiliki pengetahuan yang terbatas tentang alat ini; jadi saya mengujinya di PC pengembangan saya. Sekarang, saya merasa nyaman dengan Jenkins sebagai "mitra" jangka panjang saya dalam proses pembuatan dan ingin "memindahkan" Jenkins ini ke server khusus.

Sebelum ini saya telah melakukan beberapa build dan memiliki artefak yang diarsipkan dari setiap build Secara khusus, nomor build sangat penting bagi saya untuk kontrol versi.

Bagaimana saya bisa mengekspor semua informasi Jenkins dari PC saya saat ini ke server baru saya?

huahsin68
sumber
6
Saya baru saja melakukan ini. Saya mengikuti langkah-langkah dari jawaban Cédric Julien, tetapi saya menemukan bahwa pada Windows saya harus menjalankan instalasi Perbaikan sebelum Jenkins dapat meluncurkan berhasil setelah pindah. Setelah Perbaikan, semuanya baik-baik saja.
Smurph269

Jawaban:

175

Mengikuti wiki Jenkins , Anda harus:

  • Instal instance Jenkins baru di server baru
  • Pastikan instance Jenkins yang lama dan yang baru dihentikan
  • Arsipkan semua konten JENKINS_HOME dari instance Jenkins lama
  • Ekstrak arsip ke direktori JENKINS_HOME baru
  • Luncurkan instance Jenkins baru
  • Jangan lupa untuk mengubah dokumentasi / tautan ke instance baru Anda dari Jenkins :)
  • Jangan lupa untuk mengubah pemilik file Jenkins baru: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME secara default terletak di ~/.jenkinspada instalasi Linux, belum tepat menemukan di mana ia berada, pergi pada http: // your_jenkins_url / configure halaman dan memeriksa nilai dari parameter pertama: Home directory; ini adalah JENKINS_HOME.

Cédric Julien
sumber
1
Ketika saya Meluncurkan jenkins baru saya, node saya menunjukkan ke bawah, yang benar. Tetapi ketika saya mengklik beberapa node URL ada menunjuk ke jenkins tua seperti di bawah ini: Jalankan dari slave command line: javaw old-jenkins-server: 8080 / komputer / slaveMachine1 / slave-agent.jnlp Atau jika slave itu tanpa kepala: java -jar slave.jar -jnlpUrl old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Sekarang Bagaimana cara membuat URL ini untuk setiap node untuk menunjuk ke-jenkins-server yang baru?
merlachandra
13
Mendapat solusi untuk masalah saya yang disebutkan dalam komentar saya sebelumnya: Goto Manage Jenkins> configure system. Di sini, di bagian 'Lokasi Jenkins', di bawah bidang 'Jenkins URL', ubah URL untuk mengarahkannya ke server jenkins baru.
merlachandra
3
pastikan untuk menyalin folder tersembunyi juga!
mohi
7
haha +1 untuk "jangan lupa mengubah dokumentasi / tautan ke instance baru Anda dari Jenkins"
Iain Smith
2
Saya memiliki masalah dengan izin dan kepemilikan file yang benar, untuk memperbaikinya saya menggunakan skrip buruh pelabuhan ini (bagian yang mengatur kepemilikan / izin): hub.docker.com/r/appcontainers/jenkins/~/dockerfile
marcinj
53

Jika direktori JENKINS_HOME Anda terlalu besar untuk disalin , dan yang Anda perlukan hanyalah menyiapkan Pekerjaan yang sama, Konfigurasi Jenkins, dan konfigurasi Jenkins (dan tidak memerlukan artefak dan laporan Pekerjaan lama), maka Anda dapat menggunakan ThinBackup Plugin :

  1. Instal ThinBackup pada sumber dan server Jenkins target
  2. Konfigurasikan Direktori Cadangan di keduanya (di Kelola Jenkins -> ThinBackup -> Pengaturan)

  3. Di Sourse Jenkins, buka ThinBackup -> Backup Now

  4. Salin dari direktori Cadangan Sumber Jenkins ke Direktori Cadangan Target Jenkins
  5. Pada Target Jenkins pergi ke ThinBackup -> Kembalikan, dan kemudian restart layanan Jenkins.
  6. Jika beberapa Plugin atau Pekerjaan tidak ada, salin konten cadangan langsung ke target JENKINS_HOME.

  7. Jika Anda memiliki otentikasi pengguna pada sumber Jenkins, dan sekarang terkunci pada Jenkins target, kemudian edit Jenkins config.xml, atur <useSecurity>ke false, dan mulai ulang Jenkins.

Noam Manos
sumber
2
Mengapa direktori JENKINS_HOME terlalu besar untuk disalin? Ukuran apa yang sedang kita bicarakan?
wotanii
9
jenkins_home saya 100Gb atau lebih, tidak ingin menyalinnya ke server baru, karena kebanyakan membuang barang
user230910
3
Jenkins_home saya ~ 4TB, jadi salinan tipis yang hanya membawa konfigurasi dan tidak ada sejarah build atau / usercontent berguna.
VolleyJosh
Keren, Plugin ... Benar-benar Menghemat banyak waktu .. mengatasi 100-an GB bukan pekerjaan mudah
Swapnil Kotwal
11

Ini berhasil bagi saya untuk pindah dari Ubuntu 12.04 (Jenkins ver. 1.628) ke Ubuntu 16.04 (Jenkins ver. 1.651.2). Saya pertama kali menginstal Jenkins dari repositori .

  1. Hentikan kedua server Jenkins
  2. Salin JENKINS_HOME(misalnya / var / lib / jenkins) dari server lama ke yang baru. Dari konsol di server baru:

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

  3. Mulai server Jenkins baru Anda

Anda mungkin tidak membutuhkan ini, tetapi saya harus melakukannya

  • Manage Jenkinsdan Reload Configuration from Disk.
  • Putuskan sambungan dan hubungkan semua budak lagi.
  • Periksa bahwa dalam Configure System > Jenkins Location, Jenkins URLsudah ditetapkan dengan benar ke server Jenkins baru.
Katu
sumber
Apakah Jenkins yang baru memiliki versi yang sama dengan yang lama?
Jakub Czaplicki
@ JakubCzaplicki - Jenkins keduanya 1,6, tetapi tidak persis versi yang sama. Jawaban diperbarui. Saya kemudian memperbarui Ubuntu 16.04 ke Jenkins 2.6 menggantikan file jenkins.war dan itu bekerja dengan baik. stackoverflow.com/questions/11062335/…
Katu
Setelah melakukan hal di atas dan mengunjungi /configureSecuritysaya mendapatkanjava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme
@ Maxi, terlambat tetapi utas ini menunjukkan bahwa masalah yang Anda sebutkan terkait dengan versi java. issues.jenkins-ci.org/browse/JENKINS-46182
Katu
1

Otomatisasi Server Jenkins:

Langkah 1:

Siapkan repositori untuk menyimpan rumah Jenkins (pekerjaan, konfigurasi, plugin, dll.) Di lokal GitLab atau di repositori pribadi GitHub dan tetap perbarui secara teratur dengan mendorong perubahan baru pada pekerjaan, plugin, dll.

Langkah 2:

Mengkonfigurasi Wayang host-kelompok / peran untuk Jenkins yang dapat digunakan untuk berputar ke atas server Jenkins baru. Lakukan semua konfigurasi dasar dalam resep Wayang dan pastikan itu menginstal Jenkins versi terbaru dan membuat direktori / mount terpisah untuk JENKINS_HOME.

Langkah 3:

Putar mesin baru menggunakan konfigurasi boneka Jenkins di atas. Ketika semuanya sudah diinstal, ambil / klon konfigurasi Jenkins dari repositori Git ke direcotry home Jenkins dan restart Jenkins.

Langkah 4:

Buka URL Jenkins, Kelola JenkinsKelola Plugin dan perbarui semua plugin yang memerlukan pembaruan.

Selesai

Anda dapat menggunakan Docker Swarm atau Kubernetes untuk skala otomatis dari slave node.

Ijaz Ahmad Khan
sumber
1

Terkadang kita mungkin tidak memiliki akses ke mesin Jenkins untuk menyalin folder langsung ke instance Jenkins lain. Jadi saya menulis utilitas berbasis menu yang menggunakan panggilan REST API Jenkins untuk menginstal plugin dan pekerjaan dari satu contoh Jenkins ke yang lain.

Untuk migrasi plugin:

  1. MENDAPATKAN permintaan: {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1akan membuat Anda daftar plugin terinstal dengan versinya.
  2. Anda dapat mengirim permintaan POST dengan parameter berikut untuk menginstal plugin ini.

    final_url=`{DESTINATION_JENKINS_SERVER}/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="{PLUGIN_NAME}@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`{crumb_field:crumb_value,"Content-Type":"application/xml”}` (where crumb_field=Jenkins-Crumb and get crumb value using API call {DESTINATION_JENKINS_SERVER}/crumbIssuer/api/json
    

Untuk migrasi pekerjaan:

  1. Anda dapat menginstal daftar pekerjaan di {SOURCE_JENKINS_URL} menggunakan panggilan REST, {SOURCE_JENKINS_URL}/view/All/api/json
  2. Kemudian Anda bisa mendapatkan setiap file config.xml pekerjaan dari pekerjaan di {SOURCE_JENKINS_URL} menggunakan URL pekerjaan {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. Gunakan file config.xml ini untuk POST konten file XML di {DESTINATION_JENKINS_URL} dan itu akan menciptakan pekerjaan di {DESTINATION_JENKINS_URL}.

Saya telah membuat utilitas berbasis menu dengan Python yang meminta pengguna untuk memulai plugin atau migrasi Jenkins dan menggunakan panggilan API Jenkins REST untuk melakukannya.

Anda dapat merujuk JenkinsMigration.docx dari URL ini

psalvi21
sumber
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
vich