Server Integrasi dan Pengiriman Berkelanjutan Jenkins tersedia di Docker Hub.
Ini adalah server Jenkins yang berfungsi penuh. https://jenkins.io/.
docker run -p 8080:8080 -p 50000:50000 --restart=on-failure jenkins/jenkins:lts-jdk17
CATATAN: baca bagian Menghubungkan agen di bawah untuk peran pemetaan 50000
port. CATATAN: baca bagian Konfigurasi DNS jika Anda melihat pesan "Contoh Jenkins ini tampaknya offline."
Ini akan menyimpan ruang kerja di /var/jenkins_home
. Semua data Jenkins ada di sana - termasuk plugin dan konfigurasi. Anda mungkin ingin menjadikannya volume eksplisit sehingga Anda dapat mengelolanya dan melampirkannya ke wadah lain untuk peningkatan:
docker run -p 8080:8080 -p 50000:50000 --restart=on-failure -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk17
Ini secara otomatis akan membuat volume buruh pelabuhan 'jenkins_home' di mesin host. Volume Docker mempertahankan kontennya bahkan ketika container dihentikan, dimulai, atau dihapus.
CATATAN: Hindari menggunakan pengikatan pengikatan dari folder pada mesin host ke /var/jenkins_home
, karena hal ini dapat mengakibatkan masalah izin file (pengguna yang digunakan di dalam wadah mungkin tidak memiliki hak atas folder pada mesin host). Jika Anda benar-benar perlu mengikat mount jenkins_home, pastikan direktori pada host dapat diakses oleh pengguna jenkins di dalam container (pengguna jenkins - uid 1000) atau gunakan parameter -u some_other_user
dengan docker run
.
docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 --restart=on-failure jenkins/jenkins:lts-jdk17
Ini akan menjalankan Jenkins dalam mode terpisah dengan penerusan port dan volume ditambahkan. Anda dapat mengakses log dengan perintah 'docker logs CONTAINER_ID' untuk memeriksa token login pertama. ID kontainer akan dikembalikan dari output perintah di atas.
Jika Anda mengikat mount dalam suatu volume - Anda cukup mencadangkan direktori itu (yaitu jenkins_home) kapan saja.
Menggunakan pengikatan mount tidak disarankan karena dapat menyebabkan masalah izin. Perlakukan direktori jenkins_home seperti halnya Anda memperlakukan database - di Docker Anda biasanya meletakkan database pada volume.
Jika volume Anda berada di dalam wadah - Anda dapat menggunakan perintah docker cp $ID:/var/jenkins_home
untuk mengekstrak data, atau opsi lain untuk menemukan di mana data volume berada. Perhatikan bahwa beberapa symlink pada beberapa OS dapat dikonversi menjadi salinan (ini dapat membingungkan jenkins dengan tautan lastStableBuild, dll)
Untuk info lebih lanjut, periksa bagian dokumen Docker di Gunakan volume
Anda dapat menentukan jumlah eksekutor pada node bawaan Jenkins menggunakan skrip asyik. Secara default, ini diatur ke 2 eksekutor, tetapi Anda dapat memperluas gambar dan mengubahnya ke jumlah eksekutor yang Anda inginkan (disarankan 0 eksekutor pada node bawaan):
executors.groovy
import jenkins.model.* Jenkins.instance.setNumExecutors(0) // Recommended to not run builds on the built-in node
dan Dockerfile
FROM jenkins/jenkins:lts COPY --chown=jenkins:jenkins executors.groovy /usr/share/jenkins/ref/init.groovy.d/executors.groovy
Anda dapat menjalankan build pada pengontrol secara langsung. Proyek Jenkins merekomendasikan agar tidak ada pelaksana yang diaktifkan pada pengontrol.
Untuk menghubungkan agen melalui koneksi TCP masuk , petakan port: -p 50000:50000
. Port tersebut akan digunakan saat Anda menghubungkan agen ke pengontrol.
Jika Anda hanya menggunakan agen pembangunan SSH (keluar), port ini tidak diperlukan, karena koneksi dibuat dari pengontrol. Jika Anda menghubungkan agen menggunakan soket web (sejak Jenkins 2.217), port agen TCP juga tidak digunakan.
Anda mungkin perlu menyesuaikan JVM yang menjalankan Jenkins, biasanya untuk menyesuaikan properti sistem atau mengubah pengaturan memori heap. Gunakan variabel lingkungan JAVA_OPTS
atau JENKINS_JAVA_OPTS
untuk tujuan ini :
docker run --name myjenkins -p 8080:8080 -p 50000:50000 --restart=on-failure --env JAVA_OPTS=-Dhudson.footerURL=http://mycompany.com jenkins/jenkins:lts-jdk17
Opsi JVM khusus untuk pengontrol Jenkins harus diatur melalui JENKINS_JAVA_OPTS
, karena alat lain mungkin juga merespons variabel lingkungan JAVA_OPTS
.
Pencatatan log Jenkins dapat dikonfigurasi melalui file properti dan properti Java java.util.logging.config.file
. Misalnya:
mkdir data cat > data/log.properties <<EOF handlers=java.util.logging.ConsoleHandler jenkins.level=FINEST java.util.logging.ConsoleHandler.level=FINEST EOF docker run --name myjenkins -p 8080:8080 -p 50000:50000 --restart=on-failure --env JAVA_OPTS="-Djava.util.logging.config.file=/var/jenkins_home/log.properties" -v `pwd`/data:/var/jenkins_home jenkins/jenkins:lts-jdk17
Jika Anda ingin menginstal Jenkins di belakang proxy terbalik dengan awalan, contoh: mysite.com/jenkins, Anda perlu menambahkan variabel lingkungan JENKINS_OPTS="--prefix=/jenkins"
lalu ikuti prosedur di bawah ini untuk mengonfigurasi proxy terbalik Anda, yang akan tergantung jika Anda memiliki Apache atau Nginx:
apache
Nginx
Jika pesan "Contoh Jenkins ini tampaknya offline." muncul saat permulaan pertama, dan log penampung menampilkan baris seperti java.net.UnknownHostException: updates.jenkins.io
, penampung Anda mungkin mengalami masalah dalam menyelesaikan nama DNS.
Untuk mengatasi masalah ini, jalankan container dengan menentukan server dns (misalnya Cloudflare 1.1.1.1 atau Google 8.8.8.8, atau server DNS lainnya):
docker run -p 8080:8080 -p 50000:50000 --restart=on-failure --dns 1.1.1.1 --dns 8.8.8.8 jenkins/jenkins:lts-jdk17
Argumen yang Anda sampaikan ke buruh pelabuhan yang menjalankan image Jenkins akan diteruskan ke peluncur jenkins, jadi misalnya Anda dapat menjalankan:
docker run jenkins/jenkins:lts-jdk17 --version
Ini akan menampilkan versi Jenkins, sama seperti saat Anda menjalankan Jenkins dari perang yang dapat dieksekusi.
Anda juga dapat mendefinisikan argumen Jenkins melalui JENKINS_OPTS
. Ini berguna untuk menyesuaikan argumen ke peluncur jenkins dalam gambar turunan Jenkins. Contoh Dockerfile berikut menggunakan opsi ini untuk memaksa penggunaan HTTPS dengan sertifikat yang disertakan dalam gambar.
FROM jenkins/jenkins:lts-jdk17 COPY --chown=jenkins:jenkins certificate.pfx /var/lib/jenkins/certificate.pfx COPY --chown=jenkins:jenkins https.key /var/lib/jenkins/pk ENV JENKINS_OPTS="--httpPort=-1 --httpsPort=8083 --httpsKeyStore=/var/lib/jenkins/certificate.pfx --httpsKeyStorePassword=Password12" EXPOSE 8083
Anda juga dapat mengubah port agen default untuk Jenkins dengan mendefinisikan JENKINS_SLAVE_AGENT_PORT
dalam contoh Dockerfile.
FROM jenkins/jenkins:lts-jdk17 ENV JENKINS_SLAVE_AGENT_PORT=50001
atau sebagai parameter untuk buruh pelabuhan,
docker run --name myjenkins -p 8080:8080 -p 50001:50001 --restart=on-failure --env JENKINS_SLAVE_AGENT_PORT=50001 jenkins/jenkins:lts-jdk17
Catatan : Variabel lingkungan ini akan digunakan untuk menyetel properti sistem jenkins.model.Jenkins.slaveAgentPort
.
Jika properti ini sudah disetel di JAVA_OPTS atau JENKINS_JAVA_OPTS , maka nilai
JENKINS_SLAVE_AGENT_PORT
akan diabaikan.
Anda dapat menjalankan container Anda sebagai root - dan menginstal melalui apt-get, menginstal sebagai bagian dari langkah-langkah pembuatan melalui penginstal alat jenkins, atau Anda dapat membuat Dockerfile sendiri untuk disesuaikan, misalnya:
FROM jenkins/jenkins:lts-jdk17 # if we want to install via apt USER root RUN apt-get update && apt-get install -y ruby make more-thing-here # drop back to the regular jenkins user - good practice USER jenkins
Dalam gambar turunan seperti itu, Anda dapat menyesuaikan instance jenkins Anda dengan skrip kait atau plugin tambahan. Untuk tujuan ini, gunakan /usr/share/jenkins/ref
sebagai tempat untuk menentukan konten JENKINS_HOME default yang Anda inginkan agar target instalasinya terlihat seperti:
FROM jenkins/jenkins:lts-jdk17 COPY --chown=jenkins:jenkins custom.groovy /usr/share/jenkins/ref/init.groovy.d/custom.groovy
Anda dapat mengandalkan CLI manajer plugin untuk meneruskan serangkaian plugin untuk diunduh beserta dependensinya. Alat ini akan melakukan pengunduhan dari pusat pembaruan, dan akses internet diperlukan untuk pusat pembaruan default.
Selama pengunduhan, CLI akan menggunakan pusat pembaruan yang ditentukan oleh variabel lingkungan berikut:
JENKINS_UC
- Pusat pembaruan utama. Pusat pembaruan ini mungkin menawarkan versi plugin tergantung pada versi Jenkins LTS Core. Nilai default: https://updates.jenkins.io
JENKINS_UC_EXPERIMENTAL
- Pusat Pembaruan Eksperimental. Pusat ini menawarkan plugin versi Alfa dan Beta. Nilai default: https://updates.jenkins.io/experimental
JENKINS_INCREMENTALS_REPO_MIRROR
- Mendefinisikan cermin Maven yang akan digunakan untuk mengunduh plugin dari repo Inkremental. Nilai default: https://repo.jenkins-ci.org/incrementals
JENKINS_UC_DOWNLOAD
- Unduh url Pusat Pembaruan. Nilai bawaan: $JENKINS_UC/download
JENKINS_PLUGIN_INFO
- Lokasi informasi plugin. Nilai default: https://updates.jenkins.io/current/plugin-versions.json
Dimungkinkan untuk mengganti variabel lingkungan dalam gambar.
❗ Perhatikan bahwa mengubah variabel pusat pembaruan tidak akan mengubah Pusat Pembaruan yang digunakan oleh runtime Jenkins, ini hanya menyangkut CLI manajer plugin.
Menginstal plugin khusus bawaan dapat dilakukan dengan menyalin file plugin HPI ke /usr/share/jenkins/ref/plugins/
di dalam Dockerfile
:
COPY --chown=jenkins:jenkins path/to/custom.hpi /usr/share/jenkins/ref/plugins/
Anda dapat menjalankan CLI secara manual di Dockerfile:
DARI jenkins/jenkins:lts-jdk17JALANKAN jenkins-plugin-cli --plugins definisi model pipa github-branch-source:1.8
Selain itu, dimungkinkan untuk meneruskan file yang berisi kumpulan plugin ini (dengan atau tanpa jeda baris).
DARI jenkins/jenkins:lts-jdk17COPY --chown=jenkins:jenkins plugins.txt /usr/share/jenkins/ref/plugins.txtRUN jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt
Saat penampung jenkins dimulai, ia akan memeriksa JENKINS_HOME
memiliki konten referensi ini, dan menyalinnya ke sana jika diperlukan. Itu tidak akan menimpa file-file tersebut, jadi jika Anda mengupgrade beberapa plugin dari UI, mereka tidak akan dikembalikan pada permulaan berikutnya.
Jika Anda ingin mengganti, tambahkan '.override' ke nama file referensi. Misalnya file bernama /usr/share/jenkins/ref/config.xml.override
akan menimpa file config.xml
yang ada di JENKINS_HOME.
Lihat juga JENKINS-24986
Berikut ini contoh untuk mendapatkan daftar plugin dari server yang ada:
JENKINS_HOST=username:[email protected]:port curl -sSL "http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?<shortName>([w-]+).*?<version>([^<]+)()(</w+>)+/1 2n/g'|sed 's/ /:/'
Contoh Keluaran:
cucumber-testresult-plugin:0.8.2 pam-auth:1.1 matrix-project:1.4.1 script-security:1.13 ...
Untuk gambar turunan 2.x, Anda mungkin juga menginginkannya
RUN echo 2.0 > /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state
untuk menunjukkan bahwa instalasi Jenkins ini telah dikonfigurasi sepenuhnya. Jika tidak, spanduk akan muncul meminta pengguna untuk memasang plugin tambahan, yang mungkin tidak sesuai.
Untuk mengaktifkan log akses pengguna Jenkins dari direktori home Jenkins di dalam kontainer buruh pelabuhan, atur nilai variabel lingkungan JENKINS_OPTS
ke --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined --simpleAccessLogger.file=/var/jenkins_home/logs/access_log
Konvensi penamaan untuk tag di Docker Hub mengikuti format <repository_name>:<tag>
, dengan nama repositori jenkins/jenkins dan tag menentukan versi gambar. Dalam kasus LTS dan versi terbaru, tagnya masing-masing adalah lts
dan latest
.
Anda dapat menggunakan tag ini untuk menarik image Jenkins yang sesuai dari Docker Hub dan menjalankannya di sistem Anda. Misalnya, untuk menarik gambar Jenkins versi LTS, gunakan perintah ini: docker pull jenkins/jenkins:lts
Untuk menggunakan Docker Compose dengan Jenkins, Anda dapat menentukan file docker-compose.yml termasuk instance Jenkins dan layanan lain yang bergantung padanya. Misalnya, file docker-compose.yml berikut mendefinisikan pengontrol Jenkins dan agen SSH Jenkins:
layanan: jenkins:gambar: jenkins/jenkins:ltsports: - Volume "8080:8080": - jenkins_home:/var/jenkins_home ssh-agent:gambar: jenkins/ssh-agentvolumes: jenkins_home:
File docker-compose.yml
ini membuat dua kontainer: satu untuk Jenkins dan satu lagi untuk agen SSH Jenkins.
Kontainer Jenkins didasarkan pada gambar jenkins/jenkins:lts
dan menampilkan antarmuka web Jenkins pada port 8080. Volume jenkins_home
adalah volume bernama yang dibuat dan dikelola oleh Docker.
Itu dipasang di /var/jenkins_home
dalam wadah Jenkins, dan itu akan mempertahankan konfigurasi dan data Jenkins.
Kontainer ssh-agent didasarkan pada image jenkins/ssh-agent
dan menjalankan server SSH untuk mengeksekusi Jenkins SSH Build Agent.
Untuk memulai instance Jenkins dan layanan lain yang ditentukan dalam file docker-compose.yml
, jalankan docker compose up -d
.
Ini akan menarik image yang diperlukan dari Docker Hub jika belum ada di sistem Anda, dan memulai layanan di latar belakang.
Anda kemudian dapat mengakses antarmuka web Jenkins di http://localhost:8080
di sistem host Anda untuk mengonfigurasi dan mengelola instans Jenkins Anda (di mana localhost
menunjuk ke port yang diterbitkan oleh Mesin Docker Anda).
CATATAN: baca bagian Konfigurasi DNS jika Anda melihat pesan "Contoh Jenkins ini tampaknya offline." Dalam hal ini tambahkan konfigurasi dns ke yaml:
layanan: jenkins:# ... konfigurasi lainnya: - 1.1.1.1 - 8.8.8.8# ... konfigurasi lainnya
Alat manajer-instalasi-plugin mendukung pembaruan file plugin untuk Anda.
Contoh perintah:
JENKINS_IMAGE=jenkins/jenkins:lts-jdk17 docker run -it ${JENKINS_IMAGE} bash -c "stty -onlcr && jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt --available-updates --output txt" > plugins2.txt mv plugins2.txt plugins.txt
Semua data yang dibutuhkan ada di direktori /var/jenkins_home - jadi tergantung bagaimana Anda mengelolanya - tergantung bagaimana Anda mengupgrade. Secara umum - Anda dapat menyalinnya - dan kemudian "buruh pelabuhan menarik" gambar itu lagi - dan Anda akan mendapatkan LTS terbaru - Anda kemudian dapat memulai dengan -v menunjuk ke data itu (/var/jenkins_home) dan semuanya akan seperti Anda meninggalkannya.
Seperti biasa - pastikan Anda mengetahui cara menjalankan buruh pelabuhan - terutama penanganan volume!
Jika Anda memasang direktori home Jenkins ke volume bernama Docker, maka pemutakhiran hanya terdiri dari docker pull
dan tidak lebih.
Kami merekomendasikan penggunaan docker compose
, terutama jika pengguna juga menjalankan container nginx/apache paralel sebagai proksi terbalik untuk container Jenkins.
Secara default, plugin akan diupgrade jika belum diupgrade secara manual dan jika versi dari image buruh pelabuhan lebih baru dari versi di container. Versi yang diinstal oleh image buruh pelabuhan dilacak melalui file penanda.
Untuk memaksa peningkatan versi plugin yang telah ditingkatkan secara manual, jalankan gambar buruh pelabuhan dengan -e PLUGINS_FORCE_UPGRADE=true
.
Perilaku default saat memutakhirkan dari gambar buruh pelabuhan yang tidak menulis file penanda adalah membiarkan plugin yang ada tetap di tempatnya. Jika Anda ingin memutakhirkan plugin yang ada tanpa penanda, Anda dapat menjalankan gambar buruh pelabuhan dengan -e TRY_UPGRADE_IF_NO_MARKER=true
. Kemudian plugin akan diupgrade jika versi yang disediakan oleh image buruh pelabuhan lebih baru.
Jika Anda ingin berkontribusi perbaikan pada repositori ini, silakan merujuk ke dokumentasi khusus.
Untuk informasi terkait keamanan image Docker ini, silakan merujuk ke dokumentasi khusus.
Kami ada di Gitter, https://gitter.im/jenkinsci/docker