Bagikan melalui


Tutorial: Membuat alur Jenkins menggunakan GitHub dan Docker

Penting

Meskipun banyak layanan Azure memiliki plug-in Jenkins, sebagian besar plug-in ini mengakhiri dukungan per 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 pembangunan dan pengujian pengembangan aplikasi, Anda dapat menggunakan alur integrasi dan penyebaran berkelanjutan (CI/CD). Dalam tutorial ini, Anda membuat alur CI/CD pada Azure VM termasuk cara:

  • Membuat Jenkins VM
  • Menginstal dan mengonfigurasi Jenkins
  • Membuat integrasi webhook antara GitHub dan Jenkins
  • Menciptakan dan memicu job build Jenkins dari commit GitHub
  • Membuat gambar Docker untuk aplikasi Anda
  • Verifikasi commit GitHub membangun citra Docker baru 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 menginstal atau memperbarui, lihat Install Azure CLI.

Membuat instans Jenkins

Dalam tutorial sebelumnya tentang Cara menyesuaikan komputer virtual Linux pada boot pertama, Anda mempelajari cara mengotomatiskan kustomisasi VM dengan cloud-init. Tutorial ini menggunakan file cloud-init untuk menginstal Jenkins dan Docker pada VM. Jenkins adalah server otomatisasi sumber terbuka populer yang terintegrasi tanpa hambatan dengan Azure untuk mengaktifkan integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD). Untuk tutorial selengkapnya tentang cara menggunakan Jenkins, lihat Jenkins di hub Azure.

Di shell Anda saat ini, buat file bernama cloud-init-jenkins.txt dan tempelkan konfigurasi berikut. Misalnya, membuat file di Cloud Shell bukan di komputer lokal Anda. Masukkan 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 membuat grup sumber daya bernama myResourceGroupJenkins 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 cloud-init-jenkins.txt jika Anda menyimpan file di luar direktori kerja Anda 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 VM dibuat dan dikonfigurasi.

Untuk memungkinkan lalu lintas web mencapai VM 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 VM Anda:

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 VM Anda untuk memulai penginstalan Jenkins. Gunakan alamat IP publik yang diperoleh pada langkah sebelumnya ke SSH ke VM Anda:

ssh azureuser@<publicIps>

Pastikan Jenkins berjalan menggunakan service perintah :

$ 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 penginstalan Jenkins dan Docker.

Sekarang buka browser web dan buka http://<publicIps>:8080. Selesaikan penyiapan Jenkins awal sebagai berikut:

  • Pilih Pilih plug-in untuk diinstal
  • Cari GitHub di kotak teks di bagian atas. Centang kotak untuk GitHub, lalu pilih Instal
  • Buat 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 Selesai
  • 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 diperlukan, masuk ke Jenkins dengan nama pengguna dan kata sandi yang Anda buat.

Membuat webhook GitHub

Untuk mengonfigurasi integrasi dengan GitHub, buka aplikasi sampelNode.js Hello World dari repositori sampel Azure. Untuk membuat 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 di kotak filter.
  • Untuk URL Payload, masukkan http://<publicIps>:8080/github-webhook/. Pastikan Anda menyertakan garis miring di akhir
  • Untuk Jenis konten, pilih application/x-www-form-urlencoded.
  • Untuk Peristiwa mana yang ingin Anda picu webhook ini?, pilih Hanya peristiwa push.
  • Atur Aktif untuk diperiksa.
  • Klik Tambahkan webhook.

Menambahkan webhook GitHub ke repositori fork Anda

Membuat tugas Jenkins

Agar Jenkins menanggapi peristiwa di GitHub seperti melakukan commit kode, buat pekerjaan Jenkins baru. Gunakan URL untuk fork GitHub Anda sendiri.

Di situs web Jenkins Anda, pilih Buat pekerjaan baru dari beranda:

  • Masukkan HelloWorld sebagai nama pekerjaan. Pilih Proyek freestyle, lalu pilih OK.
  • Di 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 Pemicu pengait GitHub 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 jendela pekerjaan.

Menguji untuk integrasi GitHub

Untuk menguji integrasi GitHub dengan Jenkins, lakukan perubahan pada fork Anda.

Kembali ke antarmuka pengguna web GitHub, pilih repositori fork Anda, lalu pilih file index.js . Pilih ikon pensil untuk mengedit file ini sehingga baris 6 dibaca:

response.end("Hello World!");

Untuk menerapkan perubahan Anda, pilih tombol Terapkan perubahan di bagian bawah.

Dalam Jenkins, build baru dimulai di bawah bagian Riwayat build di pojok 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 menghasilkan pesan Test ke konsol. Setiap kali sebuah komit dibuat di GitHub, webhook menjangkau Jenkins dan memicu build baru dengan demikian.

Menentukan gambar build Docker

Untuk melihat aplikasi Node.js berjalan berdasarkan commit GitHub Anda, mari membangun image Docker untuk menjalankan aplikasi. Gambar dibangun dari Dockerfile yang menentukan cara mengonfigurasi kontainer yang menjalankan aplikasi.

Dari koneksi SSH ke VM Anda, ubah ke direktori ruang kerja Jenkins yang dinamai sesuai dengan pekerjaan yang Anda buat di langkah sebelumnya. Dalam contoh ini, yang bernama HelloWorld.

cd /var/lib/jenkins/workspace/HelloWorld

Buat file di direktori ruang kerja ini dengan sudo sensible-editor Dockerfile dan tempelkan isi 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 Hello World, lalu menyalin file aplikasi dan menginisialisasinya.

Membuat aturan pembangunan Jenkins

Pada langkah sebelumnya, Anda membuat aturan build Jenkins dasar yang menghasilkan 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 silang 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 ini, 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 lalu dihapus. Kontainer baru kemudian mulai menggunakan gambar dan menjalankan aplikasi Node.js Anda berdasarkan penerapan terbaru di GitHub.

Menguji alur Anda

Untuk melihat seluruh alur beraksi, edit file index.js di repositori GitHub fork 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 di kontainer baru.

Jika diperlukan, dapatkan alamat IP publik VM 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 mencerminkan penerapan terbaru di fork GitHub Anda sebagai berikut:

Menjalankan aplikasi Node.js

Sekarang buat pengeditan lain ke 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 Anda yang berjalan di kontainer baru sebagai berikut:

Menjalankan aplikasi Node.js setelah komit GitHub lain

Langkah selanjutnya

Dalam tutorial ini, Anda mengonfigurasi GitHub untuk menjalankan pekerjaan build Jenkins pada setiap penerapan kode lalu menyebarkan kontainer Docker untuk menguji aplikasi Anda. Anda mempelajari cara untuk:

  • Membuat Jenkins VM
  • Menginstal dan mengonfigurasi Jenkins
  • Membuat integrasi webhook antara GitHub dan Jenkins
  • Menciptakan dan memicu job build Jenkins dari commit GitHub
  • Membuat gambar Docker untuk aplikasi Anda
  • Verifikasi commit GitHub membangun citra Docker baru dan memperbarui aplikasi yang sedang berjalan.

Lanjutkan ke tutorial berikutnya untuk mempelajari selengkapnya tentang cara mengintegrasikan Jenkins dengan Azure DevOps Services.