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

140

Saya baru di Hudson / Jenkins dan bertanya-tanya apakah ada cara untuk memeriksa file konfigurasi Hudson ke kontrol sumber.

Idealnya saya ingin dapat mengklik beberapa tombol di UI yang mengatakan 'simpan konfigurasi' dan periksa file konfigurasi Hudson untuk kontrol sumber.

Yuval Roth
sumber
Atau Anda dapat menyimpan informasi itu dalam repo Git sesuai permintaan: lihat jawaban saya di bawah ini
VonC
Periksa: direktori HUDSON_HOME untuk struktur file Jenkins.
kenorb

Jawaban:

62

Jawaban yang paling membantu

Ada plugin yang disebut plugin konfigurasi SCM Sync .


Jawaban Asli

Lihat jawaban saya untuk pertanyaan serupa. Ide dasarnya adalah menggunakan filesystem-scm-plugin untuk mendeteksi perubahan pada file xml. Bagian kedua Anda akan melakukan perubahan pada SVN.

EDIT: Jika Anda menemukan cara untuk menentukan pengguna untuk perubahan, beri tahu kami.

EDIT 2011-01-10 Sementara itu ada plugin baru: Plugin konfigurasi SCM Sync . Saat ini hanya bekerja dengan subversi dan git, tetapi dukungan untuk repositori lebih banyak direncanakan. Saya menggunakannya sejak versi 0.0.3 dan sejauh ini berhasil.

Peter Schuetze
sumber
2
Saya mohon berbeda: plugin memiliki beberapa kelemahan utama jika Anda menggunakan git dan beroperasi di lingkungan yang kompleks: 'Jika Anda menggunakan Git maka Anda harus menggunakan kunci SSH dengan nama default. Itu "id_rsa". SCM Sync tidak memiliki opsi untuk menentukan jalur kunci ssh. SCM Sync menggunakan .ssh / id_rsa dari direktori home dari pemilik proses jenkins. ' dari [ wiki.jenkins-ci.org/display/JENKINS/…
Ben Hutchison
2
Plugin SCM Sync Configuration tidak kompatibel dengan plugin Subversion> = 2.0 (per issues.jenkins-ci.org/browse/JENKINS-21640 ).
Nick Jones
1
Saya tidak akan merekomendasikan menggunakan plugin khusus ini, posting instalasi jenkins tidak muncul. Tampaknya ada banyak bug di plugin ini dan tidak terlalu sering melakukan upgrade / perbaikan. Hindari "Plugin konfigurasi SCM Sync"
vikramvi
1
@vikramvi, apa alternatif yang Anda usulkan?
Igor Rodriguez
1
@IgorRodriguez Sebagai pekerjaan jenkins tidak sering mengalami perubahan dibandingkan dengan kode proyek; Saya melakukan perubahan secara manual ke github.
vikramvi
38

Perhatikan bahwa Vogella memiliki pertanyaan baru-baru ini (Januari 2014, dibandingkan dengan pertanyaan OP Januari 2010) dan berbeda.
Pertimbangkan bahwa plugin konfigurasi SCM Sync dapat menghasilkan banyak komitmen.
Jadi, alih-alih mengandalkan plugin dan proses otomatis, ia mengelola fitur yang sama secara manual:

Menyimpan informasi Pekerjaan Jenkins di Git

Saya menemukan jumlah komit sedikit berlebihan, jadi saya memutuskan untuk mengontrol komit secara manual dan hanya menyimpan informasi Pekerjaan dan bukan konfigurasi Jenkins.
Untuk beralih ke direktori pekerjaan Jenkins Anda (Ubuntu:) /var/lib/jenkins/jobsdan lakukan perintah " git init".

Saya membuat .gitignorefile berikut untuk menyimpan hanya informasi pekerjaan Git:

builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber
modules/
*.log

Sekarang Anda dapat menambahkan dan melakukan perubahan sesuka Anda.
Dan jika Anda menambahkan remote lain ke repositori Git Anda, Anda dapat mendorong konfigurasi Anda ke server lain.

Alberto sebenarnya merekomendasikan untuk menambahkan juga (dalam$JENKINS_HOME :

  • config jenkins sendiri (config.xml ),
  • konfigurasi plugin jenkins (hudson*.xml ) dan
  • pengguna mengkonfigurasi ( users/*/config.xml)
VONC
sumber
Tidakkah menyimpan konfigurasi pengguna memperlihatkan token API plaintext di dalamnya config.xml?
Boon
@Boon Saya tidak tahu sebenarnya, karena saya tidak harus menggunakan token API baru-baru ini. Itu bisa menjadi pertanyaan yang bagus untuk Anda tanyakan.
VonC
2
Setelah beberapa penelitian, ternyata token API dienkripsi dalam XML, jadi ini tidak akan menimbulkan risiko keamanan.
Boon
19

Untuk mengelola konfigurasi Anda secara manual dengan Git, file .gitignore berikut mungkin bermanfaat.

# Miscellaneous Hudson litter
*.log
*.tmp
*.old
*.bak
*.jar
*.json

# Generated Hudson state
/.owner
/secret.key
/queue.xml
/fingerprints/
/shelvedProjects/
/updates/

# Tools that Hudson manages
/tools/

# Extracted plugins
/plugins/*/

# Job state
builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber

Lihat GitHub Gist ini dan posting blog ini untuk lebih jelasnya.

Emil Sit
sumber
14

Ada plug-in Konfigurasi SCM Sync yang baru yang melakukan persis apa yang Anda cari.

Plugin SCM Sync Configuration Hudson ditujukan untuk 2 fitur utama:

  • Tetap sinkronkan config.xml Anda (dan sumber daya lainnya) file hudson dengan repositori SCM
  • Lacak perubahan (dan pembuat) yang dilakukan pada setiap file dengan pesan komit

Saya belum benar-benar mencoba ini, tetapi terlihat menjanjikan.

Matt Solnit
sumber
3
Saya akan tertarik dengan konfigurasi yang berfungsi dari plug-in Konfigurasi SCM Sync dengan Git, saya mencoba beberapa konfigurasi dan saya tidak bisa membuatnya bekerja (dan pesan kesalahan dalam log tidak membantu yang terbaik).
Sebastiano Pilla
8

Anda dapat menemukan file konfigurasi di folder rumah Jenkins (mis /var/lib/jenkins.).

Untuk menyimpannya di VCS, pertama masuk sebagai Jenkins ( sudo su - jenkins) dan buat kredensial git-nya:

git config --global user.name "Jenkins"
git config --global user.email "[email protected]"

Kemudian inisialisasi, tambahkan dan komit file-file dasar seperti:

git init
git add config.xml jobs/ .gitconfig
git commit -m'Adds Jenkins config files' -a

pertimbangkan juga untuk membuat .gitignorefile-file berikut untuk diabaikan (sesuaikan sesuai kebutuhan):

# Git untracked files to ignore.

# Cache.
.cache/

# Fingerprint records.
fingerprints/

# Working directories.
workspace/

# Secret files.
secrets/
secret.*
*.enc
*.key
users/
id_rsa

# Plugins.
plugins/

# State files.
*.state

# Job state files.
builds/
lastStable
lastSuccessful
nextBuildNumber

# Updates.
updates/

# Hidden files.
.*
# Except git config files.
!.git*
!.ssh/

# User content.
userContent/

# Log files.
logs/
*.log

# Miscellaneous litter
*.tmp
*.old
*.bak
*.jar
*.json
*.lastExecVersion

Kemudian tambahkan: git add .gitignore.

Setelah selesai, Anda dapat menambahkan file konfigurasi pekerjaan, mis

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

Terakhir, tambahkan dan komit file lain apa pun jika perlu, lalu dorong ke repositori jauh tempat Anda ingin menyimpan file konfigurasi.


Ketika file Jenkins diperbarui, Anda harus memuatnya kembali ( Reload Configuration from Disk ) atau jalankan reload-configurationdari Jenkins CLI.

kenorb
sumber
Mengapa konfigurasi seluruh situs dikecualikan? Saya melihat bahwa jawaban lain memasukkannya.
Vincent Beltman
@kenorb saya akan mengecualikannya lagi. Baris komentar di atas *.xmltidak mengubah aturan dan git mengabaikan semua file xml termasuk config.xmldari jobsdirektori, git statuskarenanya mengabaikan proyek baru dengan diam-diam .
Mikolasan
5

Cara yang saya sukai adalah mengecualikan semua yang ada di folder home Jenkins kecuali file konfigurasi yang Anda inginkan di VCS Anda. Ini .gitignorefile yang saya gunakan:

*
!.gitignore
!/jobs/*/*.xml
!/*.xml
!/users/*/config.xml
!*/

Ini mengabaikan segalanya ( *) kecuali ( !).gitignore itu sendiri, pekerjaan / proyek, plugin dan file konfigurasi penting dan pengguna lainnya.

Ini juga layak dipertimbangkan untuk memasukkan plugins folder. Plugin yang diperbarui harus dimasukkan ...

Pada dasarnya solusi ini memudahkan pembaruan Jenkins / Hudson di masa depan karena file baru tidak secara otomatis berada dalam ruang lingkup. Anda hanya mendapatkan screeen apa yang Anda inginkan.

nepa
sumber
5

Yang lebih akurat .gitignore, terinspirasi oleh balasan dari nepa :

*
!.gitignore
!/jobs/
!/jobs/*/
/jobs/*/*
!/jobs/*/config.xml
!/users/
!/users/*/
/users/*/*
!/users/*/config.xml
!/*.xml

Mengabaikan semuanya kecuali .xmlfile konfigurasi dan .gitignoredirinya sendiri. (perbedaan untuk nepa 's .gitignoreadalah bahwa hal itu tidak 'jangan abaikan' semua direktori tingkat atas ( !*/) seperti logs/, cache/, dll)

Andrey
sumber
2

Jawaban dari Mark ( https://stackoverflow.com/a/4066654/142207 ) harus berfungsi untuk SVN dan Git (walaupun konfigurasi Git tidak bekerja untuk saya).

Tetapi jika Anda membutuhkannya untuk bekerja dengan repo Mercurial, buat pekerjaan dengan skrip berikut:

hg remove -A || true
hg add ../../config.xml
hg add ../../*/config.xml
if [ ! -z "`hg status -admrn`" ]; then
    hg commit -m "Scheduled commit" -u [email protected]
    hg push
fi
okigan
sumber
2

Saya telah menulis sebuah plugin yang memungkinkan Anda memeriksa instruksi Jenkins ke dalam kontrol sumber. Cukup tambahkan .jenkins.ymlfile dengan konten:

script:
    - make
    - make test

dan Jenkins akan melakukannya:

masukkan deskripsi gambar di sini

Wilfred Hughes
sumber
0

Saya sudah memeriksa hudson sepenuhnya, Anda bisa menggunakan ini sebagai titik awal https://github.com/morkeleb/continuous-delivery-with-hudson

Ada manfaat untuk menjaga seluruh hudson di git. Semua perubahan konfigurasi dicatat dan Anda dapat menguji uji coba dengan cukup mudah pada satu mesin dan kemudian memperbarui mesin lainnya menggunakan git pull.

Kami menggunakan ini sebagai pelat untuk pengaturan pengiriman berkelanjutan hudson kami di tempat kerja.

Salam Morten

Morten
sumber