Tutorial: Membuat alur Jenkins menggunakan GitHub dan Docker
Penting
Banyak layanan Azure memiliki plug-in Jenkins. Beberapa plug-in ini dihentikan pada 29 Februari 2024. Azure CLI adalah cara yang saat ini direkomendasikan untuk mengintegrasikan Jenkins dengan layanan Azure. Untuk informasi selengkapnya, lihat artikel Plug-in Jenkins untuk Azure.
Untuk mengotomatiskan fase build dan pengujian dari pengembangan aplikasi, Anda dapat menggunakan alur integrasi dan penyebaran berkelanjutan (CI/CD). Dalam tutorial ini, Anda membuat alur CI/CD di mesin virtual Azure termasuk cara:
- Membuat mesin virtual Jenkins
- Menginstal dan mengonfigurasikan Jenkins
- Membuat integrasi webhook antara GitHub dan Jenkins
- Membuat dan memicu pekerjaan pembuatan Jenkins dari penerapan GitHub
- Membuat gambar Docker untuk aplikasi Anda
- Memverifikasi gambar Docker baru penerapan GitHub dan memperbarui aplikasi yang sedang berjalan
Tutorial ini menggunakan CLI dalam Azure Cloud Shell, yang terus diperbarui ke versi terkini. Untuk membuka Cloud Shell, pilih Coba dari bagian atas blok kode apa pun.
Jika Anda memilih untuk menginstal dan menggunakan CLI secara lokal, tutorial ini mengharuskan Anda menjalankan Azure CLI versi 2.0.30 atau versi lebih baru. Jalankan az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
Membuat instans Jenkins
Dalam tutorial sebelumnya tentang Cara menyesuaikan mesin virtual Linux pada boot pertama, Anda belajar cara mengotomatiskan kustomisasi VM dengan cloud-init. Tutorial ini menggunakan file cloud-init untuk memasang Jenkins dan Docker di mesin virtual. Jenkins adalah server otomatisasi sumber terbuka yang dapat berintegrasi dengan layanan Azure untuk mengaktifkan integrasi berkelanjutan (CI) dan penyebaran berkelanjutan (CD). Untuk tutorial selengkapnya tentang cara menggunakan Jenkins, lihat Jenkins di hub Azure.
Di shell Anda saat ini, buat file bernama cloud-init.txt dan tempelkan konfigurasi berikut. Misalnya, membuat file di Cloud Shell bukan di komputer lokal Anda. Ketik sensible-editor cloud-init-jenkins.txt
untuk membuat file dan melihat daftar editor yang tersedia. Pastikan bahwa seluruh file cloud-init disalin dengan benar, terutama baris pertama:
#cloud-config
package_upgrade: true
write_files:
- path: /etc/systemd/system/docker.service.d/docker.conf
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
- path: /etc/docker/daemon.json
content: |
{
"hosts": ["fd://","tcp://127.0.0.1:2375"]
}
runcmd:
- apt install openjdk-8-jre-headless -y
- wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
- sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
- apt-get update && apt-get install jenkins -y
- curl -sSL https://get.docker.com/ | sh
- usermod -aG docker azureuser
- usermod -aG docker jenkins
- service jenkins restart
Sebelum Anda dapat membuat VM, buat grup sumber daya dengan grup az buat. Contoh berikut ini menampilkan cara membuat grup sumber daya bernama myResourceGroup di lokasi eastus:
az group create --name myResourceGroupJenkins --location eastus
Sekarang buat VM dengan az vm create. Gunakan parameter --custom-data
untuk meneruskan file konfigurasi cloud-init Anda. Berikan jalur lengkap ke konfigurasi cloud-init.txt jika Anda menyimpan file di luar direktori kerja saat ini.
az vm create --resource-group myResourceGroupJenkins \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init-jenkins.txt
Dibutuhkan beberapa menit agar mesin virtual dibuat dan dikonfigurasi.
Untuk memungkinkan lalu lintas web mencapai mesin virtual Anda, gunakan az vm open-port untuk membuka port 8080 untuk lalu lintas Jenkins dan port 1337 untuk aplikasi Node.js yang digunakan untuk menjalankan aplikasi sampel:
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 8080 --priority 1001
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 1337 --priority 1002
Mengonfigurasi Jenkins
Untuk mengakses instans Jenkins Anda, dapatkan alamat IP publik mesin virtual:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Untuk tujuan keamanan, Anda perlu memasukkan kata sandi admin awal yang disimpan dalam file teks di mesin virtual Anda untuk memulai pemasangan Jenkins. Gunakan alamat IP publik yang diperoleh pada langkah sebelumnya ke SSH ke mesin virtual Anda:
ssh azureuser@<publicIps>
Verifikasi Jenkins berjalan menggunakan perintah service
:
$ service jenkins status
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Tue 2019-02-12 16:16:11 UTC; 55s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 4103)
CGroup: /system.slice/jenkins.service
Feb 12 16:16:10 myVM systemd[1]: Starting LSB: Start Jenkins at boot time...
...
Lihat initialAdminPassword
untuk pemasangan Jenkins Anda dan salin:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Jika file belum tersedia, tunggu beberapa menit lagi hingga cloud-init menyelesaikan pemasangan Jenkins dan Docker.
Sekarang buka browser web dan buka http://<publicIps>:8080
. Selesaikan penyiapan Jenkins awal sebagai berikut:
- Pilih Pilih plug-in yang akan dipasang
- Cari GitHub di kotak teks di bagian atas. Centang kotak GitHub, lalu pilih Pasang
- Buat objek pengguna admin pertama. Masukkan nama pengguna, seperti admin, lalu berikan kata sandi aman Anda sendiri. Terakhir, ketik nama lengkap dan alamat email.
- Pilih Simpan dan Selesaikan
- Setelah Jenkins siap, pilih Mulai menggunakan Jenkins
- Jika browser web Anda menampilkan halaman kosong saat Anda mulai menggunakan Jenkins, mulai ulang layanan Jenkins. Dari sesi SSH Anda, ketik
sudo service jenkins restart
, lalu refresh browser web Anda.
- Jika browser web Anda menampilkan halaman kosong saat Anda mulai menggunakan Jenkins, mulai ulang layanan Jenkins. Dari sesi SSH Anda, ketik
- Jika perlu, masuk ke Jenkins dengan nama pengguna dan kata sandi yang Anda buat.
Membuat webhook GitHub
Untuk mengonfigurasi integrasi dengan GitHub, buka aplikasi sampel Halo Dunia Node.js dari repositori sampel Azure. Untuk melakukan fork repositori ke akun GitHub Anda sendiri, pilih tombol Fork di sudut kanan atas.
Buat webhook di dalam fork yang Anda buat:
- Pilih Pengaturan, lalu pilih Webhook di sisi kiri.
- Pilih Tambahkan webhook, lalu masukkan Jenkins dalam kotak filter.
- Untuk URL Payload, masukkan
http://<publicIps>:8080/github-webhook/
. Pastikan Anda menyertakan akhiran / - Untuk Jenis konten, pilih application/x-www-form-urlencoded.
- Untuk Acara mana yang Anda pilih untuk pemicuan webhook ini?, pilih Hanya acara push.
- Atur Aktif agar dicentang.
- Pilih Tambahkan Webhook.
Membuat pekerjaan Jenkins
Agar Jenkins merespons suatu peristiwa di GitHub seperti melakukan kode, buat pekerjaan Jenkins. Gunakan URL untuk fork GitHub Anda sendiri.
Di situs web Jenkins Anda, pilih Buat pekerjaan baru dari halaman beranda:
- Masukkan HelloWorld sebagai nama pekerjaan. Pilih proyek Freestyle, lalu pilih OK.
- Di bawah bagian Umum, pilih Proyek GitHub dan masukkan URL repositori fork Anda, seperti
https://github.com/cynthn/nodejs-docs-hello-world
- Di bawah bagian Manajemen kode sumber, pilih Git, masukkan URL .git repositori fork Anda, seperti
https://github.com/cynthn/nodejs-docs-hello-world.git
- Di bawah bagian Pemicu Build, pilih GitHub hook trigger untuk polling GITscm.
- Di bawah bagian Build, pilih Tambahkan langkah build. Pilih Jalankan shell, lalu masukkan
echo "Test"
di jendela perintah. - Pilih Simpan di bagian bawah halaman.
Menguji integrasi GitHub
Untuk menguji integrasi GitHub dengan Jenkins, terapkan perubahan di fork Anda.
Kembali ke UI web GitHub, pilih repositori fork Anda, lalu pilih file index.js. Pilih ikon pensil untuk mengedit file ini sehingga baris 6 berbunyi:
response.end("Hello World!");
Untuk melakukan perubahan, pilih tombol Terapkan perubahan di bagian bawah.
Di Jenkins, build baru dimulai di bawah bagian Build history di sudut kiri bawah halaman pekerjaan Anda. Pilih tautan nomor build dan pilih Output konsol di sisi kiri. Anda dapat melihat langkah-langkah yang diambil Jenkins saat kode Anda ditarik dari GitHub dan tindakan build mengeluarkan pesan Test
ke konsol. Setiap kali penerapan dibuat dalam GitHub, webhook menjangkau Jenkins dan memicu build baru dengan cara ini.
Menentukan gambar build Docker
Untuk memastikan bahwa aplikasi Node.js berjalan berdasarkan GitHub Anda, mari buat gambar Docker untuk menjalankan aplikasi. Gambar dibangun dari Dockerfile yang menentukan cara mengonfigurasi kontainer yang menjalankan aplikasi.
Dari koneksi SSH ke mesin virtual Anda, ubah ke direktori ruang kerja Jenkins yang dinamai sesuai dengan pekerjaan yang Anda buat di langkah sebelumnya. Dalam contoh ini, direktori diberi nama HelloWorld.
cd /var/lib/jenkins/workspace/HelloWorld
Buat file di direktori ruang kerja ini dengan sudo sensible-editor Dockerfile
dan tempel konten berikut. Pastikan bahwa seluruh Dockerfile disalin dengan benar, terutama baris pertama:
FROM node:alpine
EXPOSE 1337
WORKDIR /var/www
COPY package.json /var/www/
RUN npm install
COPY index.js /var/www/
Dockerfile ini menggunakan gambar Node.js dasar menggunakan Alpine Linux, mengekspos port 1337 yang dijalankan aplikasi Halo Dunia, lalu menyalin file aplikasi dan menginisialisasinya.
Membuat aturan build Jenkins
Pada langkah sebelumnya, Anda membuat aturan build Jenkins dasar yang mengeluarkan pesan ke konsol. Mari kita buat langkah build untuk menggunakan Dockerfile dan menjalankan aplikasi.
Kembali ke instans Jenkins Anda, pilih pekerjaan yang Anda buat di langkah sebelumnya. Pilih Konfigurasikan di sisi kiri dan gulir ke bawah ke bagian Build:
Hapus langkah build
echo "Test"
yang ada. Pilih palang merah di sudut kanan atas kotak langkah build yang ada.Pilih Tambahkan langkah build, lalu pilih Jalankan shell
Dalam kotak Perintah, masukkan perintah Docker berikut, lalu pilih Simpan:
docker build --tag helloworld:$BUILD_NUMBER . docker stop helloworld && docker rm helloworld docker run --name helloworld -p 1337:1337 helloworld:$BUILD_NUMBER node /var/www/index.js &
Langkah-langkah build Docker membuat gambar dan menandainya dengan nomor build Jenkins sehingga Anda dapat mempertahankan riwayat gambar. Setiap kontainer yang ada, yang menjalankan aplikasi dihentikan dan kemudian dihapus. Kontainer baru kemudian mulai menggunakan gambar dan menjalankan aplikasi Node.js Anda berdasarkan penerapan terbaru di GitHub.
Uji alur Anda
Untuk melihat seluruh alur beraksi, edit file index.js di repositori fork GitHub Anda lagi dan pilih Terapkan perubahan. Pekerjaan baru dimulai di Jenkins berdasarkan webhook untuk GitHub. Dibutuhkan beberapa detik untuk membuat gambar Docker dan memulai aplikasi Anda dalam kontainer baru.
Jika diperlukan, dapatkan alamat IP publik mesin virtual Anda lagi:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Buka browser web dan masukkan http://<publicIps>:1337
. Aplikasi Node.js Anda ditampilkan dan menunjukkan penerapan terbaru di fork GitHub sebagai berikut:
Sekarang buat pengeditan lain pada file index.js di GitHub dan lakukan perubahan. Tunggu beberapa detik hingga pekerjaan selesai di Jenkins, lalu refresh browser web Anda untuk melihat versi terbaru aplikasi berjalan dalam kontainer baru sebagai berikut:
Langkah berikutnya
Dalam tutorial ini, Anda mengonfigurasi GitHub untuk menjalankan pekerjaan build Jenkins pada setiap penerapan kode dan kemudian menyebarkan kontainer Docker untuk menguji aplikasi Anda. Anda mempelajari cara untuk:
- Membuat mesin virtual Jenkins
- Menginstal dan mengonfigurasikan Jenkins
- Membuat integrasi webhook antara GitHub dan Jenkins
- Membuat dan memicu pekerjaan pembuatan Jenkins dari penerapan GitHub
- Membuat gambar Docker untuk aplikasi Anda
- Memverifikasi gambar Docker baru penerapan GitHub dan memperbarui aplikasi yang sedang berjalan
Lanjutkan ke tutorial berikutnya untuk mempelajari selengkapnya tentang cara mengintegrasikan Jenkins dengan Layanan Azure DevOps.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk