Bagaimana Anda mencadangkan pekerjaan Jenkins & master konfigurasi?

56

Saya ingin mencadangkan semua pekerjaan Jenkins dan file konfigurasi. Apa cara termudah untuk melakukannya?

kenorb
sumber
Apa yang kamu coba?
030
1
Saya mencoba ini .
kenorb

Jawaban:

33

Ada banyak cara untuk melakukan ini, tetapi cara termudah yang dapat saya pikirkan adalah melakukan backup folder Home Jenkins.

Anda dapat melihat di mana rumah Jenkins Anda dengan:

echo $JENKINS_HOME

Dan misalnya, jika Anda hanya ingin membuat cadangan pekerjaan Anda dapat pergi ke:

cd $JENKINS_HOME/jobs

Dan buat cadangan untuk folder itu.

Semua konfigurasi itu akan menjadi banyak file XML .

Jika Anda menggunakan gambar buruh pelabuhan Jenkins resmi , rumah akan berada di:

/var/jenkins_home
Gepser
sumber
2
Saya perlu beralih ke pengguna jenkins untuk memiliki akses ke $JENKINS_HOMEvariabel lingkungan:, sudo su -s /bin/bash jenkinsdan kemudian echo $JENKINS_HOME, yang bagi saya adalah/var/lib/jenkins
Bryce Guinta
2
Masalah dengan membuat cadangan seluruh folder 'pekerjaan' adalah bahwa juga eksekusi pekerjaan akan disalin - ini mungkin berarti banyak GB.
Mike Argyriou
Apakah layanan Jenkins harus dimulai kembali?
Xin Meng
Rumah Jenkins di MacOS (Instalasi default Homebrew): ~ / .jenkins
chuckSaldana
30

Semua pekerjaan ( jobs/) dan file konfigurasi master ( config.xml) dapat ditemukan di folder rumah Jenkins ( JENKINS_HOME) dalam struktur berikut:

JENKINS_HOME
 +- config.xml     (jenkins root configuration)
 +- *.xml          (other site-wide configuration files)
 +- userContent    (files in this directory will be served under your http://server/userContent/)
 +- fingerprints   (stores fingerprint records)
 +- plugins        (stores plugins)
 +- workspace (working directory for the version control system)
     +- [JOBNAME] (sub directory for each job)
 +- jobs
     +- [JOBNAME]      (sub directory for each job)
         +- config.xml     (job configuration file)
         +- latest         (symbolic link to the last successful build)
         +- builds
             +- [BUILD_ID]     (for each build)
                 +- build.xml      (build result summary)
                 +- log            (log file)
                 +- changelog.xml  (change log)

Sebagian besar konfigurasi dalam format XML, jadi mencadangkan semua .xmlfile sudah cukup.

Semua pengaturan, log bangunan, arsip artefak disimpan di bawah direktori JENKINS_HOME. Cukup arsipkan direktori ini untuk membuat cadangan. Demikian pula, memulihkan data hanya mengganti konten direktori JENKINS_HOME dari cadangan.

Pencadangan dapat dilakukan tanpa menghentikan server, tetapi saat Anda memulihkan, harap hentikan server.


Untuk pencadangan yang konsisten itu adalah praktik yang baik untuk menyimpan JENKINS_HOMEdirektori di bawah repositori Git.

Sebagai contoh:

cd $JENKINS_HOME
git init
shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a

dan mendorong file ke repositori eksternal. Anda juga dapat menambahkan .gitignorefile berikut untuk mengabaikan beberapa file.

Terkait: Apakah ada cara untuk menjaga file konfigurasi Hudson / Jenkins di kontrol sumber?

kenorb
sumber
Seberapa sering Anda membuat cadangan? Apakah Anda mendorong kode secara otomatis ke repositori git? Jika benar, apakah Anda membuat Permintaan Tarik yang harus digabung secara manual (intervensi manual) untuk melakukan pemeriksaan integritas cadangan?
030
2
@ 030 Biasanya secara manual setelah beberapa perubahan besar, ketika saya tahu konfigurasi stabil dan saya perlu mencadangkannya, karena Jenkins sering suka memecahkan hal-hal, seperti mengubah budak dari unix ke windows sendiri, menghapus kata sandi dari formulir, jadi memilikinya di git / GitHub, saya dapat dengan mudah membandingkan dan menemukan data yang hilang dan menambahkannya kembali atau mengembalikan beberapa file tertentu. Ada beberapa plugin untuk menyimpan perubahan riwayat, tetapi saya tidak merasa itu berguna.
kenorb
Anda menyimpan kata sandi di git? Apakah Anda mengenkripsi mereka? Apakah Anda menggunakan pipa alias Pipeline sebagai Kode juga?
030
3
@ 030 Jenkins mengenkripsi kata sandi / kredensial secara default, tetapi Anda dapat dengan mudah mendekripsi mereka. Namun, tanpa kunci master (yang seharusnya bukan bagian dari cadangan) atau akses ke Jenkins, tidak ada orang lain yang bisa melakukannya. Saya tidak menggunakan Pipeline sebagai Kode.
kenorb
Bagaimana Anda menguji integritas cadangan ini di git? Misalnya apakah Anda memutar mesin virtual atau sistem buruh pelabuhan, pasang repo git dan periksa apakah semuanya masih berfungsi?
030
11

Jika pekerjaan Jenkins Anda didefinisikan dalam Jenkinsfile, Anda dapat menyimpannya di repositori git dan memuatnya menggunakan Pipeline .

Sayangnya, karena tidak semua plugin Jenkins mendukung Jenkinsfile dan Pipeline, Anda perlu secara manual membuat Jenkinsfile baru jika Anda ingin memindahkan pekerjaan yang ada ke format ini.

avi
sumber
9

The SCM Sync Konfigurasi Plugin tidak persis apa yang Anda inginkan. Bekerja dengan svn atau git untuk mencadangkan inti jenkins dan konfigurasi pekerjaan Anda, sehingga memberi Anda pelacakan mudah tentang siapa yang membuat perubahan, serta cadangan.

Adam Berry
sumber
1
Saya benar-benar tar folder $ JENKINS_HOME, tapi ini kelihatannya jauh lebih baik.
MrMesees
2
Plugin itu sepertinya tidak aktif / mati - apakah benar-benar fungsional dan setara pada 2017?
Tuukka Mustonen
5

Ada beberapa cara untuk membuat cadangan data jenkins dan konfigurasi master. Cara terbaik untuk cadangan adalah menggunakan plugin Thinbackup. Anda dapat menjadwalkan pencadangan tepat waktu menggunakan ekspresi cron. Anda dapat mengonfigurasi cadangan lengkap dan cadangan tambahan juga.

Cara lain untuk membuat cadangan data dan konfigurasi adalah dengan mengambil snapshot disk dari server master jenkins Anda. Cara ideal untuk melakukan ini dengan memasang disk dan menautkan direktori konfigurasi jenkins ke titik pemasangan disk

Kedua skenario dijelaskan dengan baik di posting blog ini . Anda akan mendapatkan ide dan langkah-langkah yang lebih baik untuk konfigurasi.

Bibin Wilson
sumber
3

Saya menggunakan skrip dari sue445/jenkins-backup-script.

Ini arsip pengaturan dan plugin Jenkins seperti:

  • $JENKINS_HOME/*.xml
  • $JENKINS_HOME/jobs/*/*.xml
  • $JENKINS_HOME/nodes/*
  • $JENKINS_HOME/plugins/*.jpi
  • $JENKINS_HOME/secrets/*
  • $JENKINS_HOME/users/*

Pemakaian

./jenkins-backup.sh /path/to/jenkins_home archive.tar.gz

# add timestamp suffix
./jenkins-backup.sh /path/to/jenkins_home backup_`date +"%Y%m%d%H%M%S"`.tar.gz
nickcheng
sumber
3

Anda dapat mencoba plugin thinBackup (meskipun tidak dipelihara secara aktif) [jika hanya mengambil cadangan logis yang Anda inginkan] (yaitu sebagian besar file xml konfigurasi, pekerjaan, node, dll.). Ukuran cadangan tidak akan terlalu besar.

Saikat Sengupta
sumber
1

Saya perlu memigrasi Jenkins dari satu contoh Windows Server ke yang lain. Akhirnya saya berhasil melakukannya seperti itu:

  • Hentikan layanan Jenkins (jika Anda mampu membelinya)
  • Salin seluruh folder Jenkins (secara default C:\Program Files x86\Jenkins)
  • Rekatkan ke instance baru
  • Masuk ke dalam direktori dan jalankan jenkins.exe install

Ini akan mendaftarkan Jenkins yang baru saja disisipkan sebagai layanan pada mesin baru dan akan bekerja 100% sama.

Jika ini berhasil maka jika Anda memerlukan cadangan hanya untuk keamanan di masa depan, salin folder Jenkins di suatu tempat. Ini akan berfungsi seperti snapshot.

Mandarin
sumber