Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
Tutorial ini menyebarkan aplikasi sampel dari GitHub ke kluster Azure Kubernetes Service (AKS) dengan menyiapkan integrasi berkelanjutan (CI) dan penyebaran berkelanjutan (CD) di Jenkins.
Dalam tutorial ini, Anda akan menyelesaikan tugas-tugas ini:
- Sebarkan sampel aplikasi suara Azure ke kluster AKS.
- Buat proyek Jenkins dasar.
- Siapkan kredensial agar Jenkins berinteraksi dengan ACR.
- Buat tugas build Jenkins dan atur webhook GitHub untuk build otomatis.
- Uji alur CI/CD untuk memperbarui aplikasi di AKS berdasarkan komit kode GitHub.
Prasyarat
Untuk menyelesaikan tutorial ini, Anda memerlukan item ini:
Pemahaman dasar tentang Kubernetes, Git, CI/CD, dan gambar kontainer
Kluster AKS dan
kubectldikonfigurasi dengan kredensial kluster AKS.Registri Azure Container Registry (ACR), nama server login ACR, dan kluster AKS yang dikonfigurasi untuk mengautentikasi dengan registri ACR.
Pengontrol Jenkins Disebarkan ke Azure Virtual Machine.
Azure CLI versi 2.0.46 atau yang lebih baru diinstal dan dikonfigurasi. Jalankan
az --versionuntuk menemukan versinya. Jika Anda perlu menginstal atau memperbarui, lihat Install Azure CLI.Docker diinstal pada sistem pengembangan Anda
Akun GitHub, token akses pribadi GitHub, dan klien Git yang diinstal pada sistem pengembangan Anda
Jika Anda menyediakan instans Jenkins Anda sendiri, sebagai gantinya dari contoh penerapan skrip ini untuk Jenkins, instans Jenkins Anda memerlukan Docker yang sudah diinstal dan dikonfigurasi serta kubectl.
Menyiapkan aplikasi Anda
Dalam artikel ini, Anda menggunakan sampel aplikasi pemungutan suara Azure yang berisi antarmuka web dan Redis untuk penyimpanan data sementara.
Sebelum Anda mengintegrasikan Jenkins dan AKS untuk penyebaran otomatis, pertama-tama siapkan dan sebarkan aplikasi suara Azure secara manual ke kluster AKS Anda. Penyebaran manual ini memungkinkan Anda melihat aplikasi beraksi.
Nota
Contoh aplikasi pemungutan suara Azure menggunakan pod Linux yang dijadwalkan untuk berjalan pada node Linux. Alur yang diuraikan dalam artikel ini juga berfungsi untuk pod Windows Server yang dijadwalkan pada node Windows Server.
Fork repositori GitHub berikut untuk aplikasi sampel - https://github.com/Azure-Samples/azure-voting-app-redis. Untuk membuat fork repositori ke akun GitHub Anda sendiri, pilih tombol Fork di sudut kanan atas.
Klon fork ke sistem pengembangan Anda. Pastikan Anda menggunakan URL fork Anda saat mengkloning repositori ini:
git clone https://github.com/<your-github-account>/azure-voting-app-redis.git
Pindah ke direktori fork yang telah Anda kloning:
cd azure-voting-app-redis
Untuk membuat gambar kontainer yang diperlukan untuk aplikasi sampel, gunakan file docker-compose.yaml dengan docker-compose:
docker-compose up -d
Gambar dasar yang diperlukan ditarik dan kontainer aplikasi dibuat. Anda kemudian dapat menggunakan perintah gambar docker untuk melihat gambar yang dibuat. Tiga gambar telah diunduh atau dibuat. Gambar azure-vote-front berisi aplikasi dan menggunakan gambar nginx-flask sebagai basis. Gambar redis digunakan untuk memulai instans Redis:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest 9cc914e25834 40 seconds ago 694MB
redis latest a1b99da73d05 7 days ago 106MB
tiangolo/uwsgi-nginx-flask flask 788ca94b2313 9 months ago 694MB
Masuk ke registri kontainer Azure Anda.
az acr login -n <acrLoginServer>
Ganti <acrLoginServer> dengan server masuk ACR Anda.
Gunakan perintah docker tag untuk memberi tag pada citra dengan nama server masuk ACR dan nomor versi v1. Gunakan nama Anda sendiri <acrLoginServer> yang diperoleh pada langkah sebelumnya:
docker tag azure-vote-front <acrLoginServer>/azure-vote-front:v1
Terakhir, dorong gambar azure-vote-front ke registri ACR Anda. Sekali lagi, ganti <acrLoginServer> dengan nama server login registri ACR Anda sendiri, seperti myacrregistry.azurecr.io:
docker push <acrLoginServer>/azure-vote-front:v1
Menyebarkan aplikasi sampel ke AKS
Untuk menyebarkan aplikasi sampel ke kluster AKS, Anda dapat menggunakan file manifes Kubernetes di akar repositori suara Azure.
azure-vote-all-in-one-redis.yaml Buka file manifes dengan editor seperti vi. Ganti microsoft dengan nama server masuk ACR Anda. Nilai ini ditemukan pada baris 60 file manifes:
containers:
- name: azure-vote-front
image: azuredocs/azure-vote-front
Selanjutnya, gunakan perintah kubectl apply untuk menyebarkan aplikasi ke kluster AKS Anda:
kubectl apply -f azure-vote-all-in-one-redis.yaml
Layanan load balancer Kubernetes dibuat untuk mengekspos aplikasi ke internet. Proses ini memerlukan waktu beberapa menit. Untuk memantau kemajuan deployment load balancer, gunakan perintah kubectl get service dengan argumen --watch.
$ kubectl get service azure-vote-front --watch
Setelah alamat EXTERNAL-IP berubah dari tertunda ke alamat IP, gunakan Control + C untuk menghentikan proses kubectl watch.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
Untuk melihat aplikasi beraksi, buka browser web ke alamat IP eksternal layanan Anda. Aplikasi suara Azure ditampilkan, seperti yang ditunjukkan dalam contoh berikut:
Mengonfigurasi Pengontrol Jenkins
Terapkan perubahan berikut untuk mengaktifkan penyebaran AKS dari Pengontrol Jenkins:
Buka port 80 masuk.
az vm open-port \
--resource-group <Resource_Group_name> \
--name <Jenkins_Controller_VM> \
--port 80 --priority 1020
Ganti <Resource_Group_name> dan <Jenkins_Controller_VM> dengan nilai yang sesuai.
SSH ke dalam Pengontrol Jenkins
ssh azureuser@<PublicIPAddress>
Ganti <PublicIPAddress> dengan alamat IP Pengontrol Jenkins.
Instal & Masuk ke AzCLI
curl -L https://aka.ms/InstallAzureCli | bash
az login
Nota
Untuk menginstal AzCLI secara manual, ikuti instruksi berikut.
Menginstal Docker
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y;
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -;
sudo apt-key fingerprint 0EBFCD88;
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable";
sudo apt-get update;
sudo apt-get install docker-ce -y;
Instal Kubectl dan Sambungkan ke AKS
sudo az aks install-cli
sudo az aks get-credentials --resource-group <Resource_Group> --name <AKS_Name>
Ganti <Resource_Group> dan <AKS_Name> dengan nilai yang sesuai.
Mengonfigurasi akses
sudo usermod -aG docker jenkins;
sudo usermod -aG docker azureuser;
sudo touch /var/lib/jenkins/jenkins.install.InstallUtil.lastExecVersion;
sudo service jenkins restart;
sudo cp ~/.kube/config /var/lib/jenkins/.kube/
sudo chmod 777 /var/lib/jenkins/
sudo chmod 777 /var/lib/jenkins/config
Membuat variabel lingkungan Jenkins
Variabel lingkungan Jenkins digunakan untuk menyimpan nama server login ACR. Variabel ini dirujuk selama pekerjaan build Jenkins. Untuk membuat variabel lingkungan ini, selesaikan langkah-langkah berikut:
Di sisi kiri portal Jenkins, pilih Kelola Jenkins>Configure System
Di bawah Properti Global, pilih Variabel lingkungan. Tambahkan variabel dengan nama
ACR_LOGINSERVERdan nilai server login ACR Anda.
Setelah selesai, Pilih Simpan di bagian bawah halaman.
Membuat kredensial Jenkins untuk ACR
Selama proses CI/CD, Jenkins membangun gambar kontainer baru berdasarkan pembaruan aplikasi, dan kemudian perlu mendorong gambar tersebut ke registri ACR.
Untuk memungkinkan Jenkins mendorong gambar kontainer yang diperbarui ke ACR, Anda perlu menentukan kredensial untuk ACR.
Untuk pemisahan peran dan izin, konfigurasikan prinsipal layanan untuk Jenkins dengan izin Kontributor ke registri ACR Anda.
Membuat prinsipal layanan untuk Jenkins dalam menggunakan ACR
Pertama, buat prinsipal layanan menggunakan perintah az ad sp create-for-rbac :
az ad sp create-for-rbac
Perintah ini menghasilkan output yang mirip dengan contoh berikut:
{
"appId": "<app-ID>",
"displayName": "azure-cli-2018-09-28-22-19-34",
"name": "http://azure-cli-2018-09-28-22-19-34",
"password": "<password>",
"tenant": "<tenant-ID>"
}
Catat appId dan kata sandi. Nilai-nilai ini digunakan dalam langkah-langkah berikut untuk mengonfigurasi sumber daya kredensial di Jenkins.
Dapatkan ID sumber daya registri ACR Anda menggunakan perintah az acr show , dan simpan sebagai variabel.
ACR_ID=$(az acr show --resource-group <Resource_Group> --name <acrLoginServer> --query "id" --output tsv)
Ganti <Resource_Group> dan <acrLoginServer> dengan nilai yang sesuai.
Buat penetapan peran untuk memberikan hak Kontributor kepada prinsipal layanan di registri ACR.
az role assignment create --assignee <appID> --role Contributor --scope $ACR_ID
Ganti <appId> dengan nilai yang disediakan dalam output dari perintah sebelumnya yang digunakan untuk membuat principal layanan.
Membuat sumber daya kredensial di Jenkins untuk perwakilan layanan ACR
Dengan penetapan peran yang dibuat di Azure, sekarang simpan kredensial ACR Anda di objek kredensial Jenkins. Kredensial ini digunakan selama proses build Jenkins.
Kembali ke sisi kiri portal Jenkins, pilih Kelola Kredensial Jenkins>Manage Credentials>Jenkins Store>Global credentials (unrestricted)>Add Credentials
Pastikan bahwa jenis kredensial adalah Nama pengguna dengan kata sandi dan masukkan item berikut:
- Nama pengguna - ID aplikasi perwakilan layanan yang dibuat untuk autentikasi dengan registri ACR Anda.
- Kata sandi - Kata sandi prinsipal layanan yang dibuat untuk autentikasi dengan registri ACR Anda.
- ID - Pengidentifikasi kredensial, seperti acr-credentials
Setelah selesai, formulir kredensial terlihat seperti contoh berikut:
Pilih OK dan kembali ke portal Jenkins.
Membuat proyek Jenkins
Dari beranda portal Jenkins Anda, pilih Item baru di sisi kiri:
Masukkan azure-vote 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/<your-github-account>/azure-voting-app-redis
Di bawah bagian Manajemen kode sumber , pilih Git, masukkan URL repositori
.gitfork Anda, seperti https://github.com/<your-github-account>/azure-voting-app-redis.gitDi bawah bagian Pemicu Build , pilih pemicu kait GitHub untuk polling GITscm
Di bawah Lingkungan Build, pilih Gunakan teks atau file rahasia
Di bawah Pengikatan, pilih Tambahkan>Nama Pengguna dan kata sandi (dipisahkan)
Masukkan
ACR_IDuntuk Variabel Nama Pengguna, danACR_PASSWORDuntuk Variabel Kata Sandi
Pilih untuk menambah Langkah Build jenis Execute Shell dan gunakan teks berikut. Skrip ini membangun gambar kontainer baru dan mendorongnya ke registri ACR Anda.
# Build new image and push to ACR. WEB_IMAGE_NAME="${ACR_LOGINSERVER}/azure-vote-front:kube${BUILD_NUMBER}" docker build -t $WEB_IMAGE_NAME ./azure-vote docker login ${ACR_LOGINSERVER} -u ${ACR_ID} -p ${ACR_PASSWORD} docker push $WEB_IMAGE_NAMETambahkan Langkah Build lain dari jenis execute shell dan gunakan teks berikut. Skrip ini memperbarui penyebaran aplikasi di AKS dengan gambar kontainer baru dari ACR.
# Update kubernetes deployment with new image. WEB_IMAGE_NAME="${ACR_LOGINSERVER}/azure-vote-front:kube${BUILD_NUMBER}" kubectl set image deployment/azure-vote-front azure-vote-front=$WEB_IMAGE_NAMESetelah selesai, klik Simpan.
Menguji proyek Jenkins
Sebelum Anda mengotomatiskan pekerjaan berdasarkan penerapan GitHub, uji build Jenkins secara manual.
Build ini memvalidasi bahwa pekerjaan telah dikonfigurasi dengan benar. Ini mengonfirmasi file autentikasi Kubernetes yang tepat ada, dan autentikasi tersebut ke ACR berfungsi.
Di menu sebelah kiri proyek, pilih Bangun Sekarang.
Build pertama lebih lama karena lapisan gambar Docker ditarik ke bawah ke server Jenkins.
Proses build melakukan tugas-tugas berikut:
- Menggandakan repositori GitHub
- Membangun citra kontainer baru
- Mendorong gambar kontainer ke registri ACR
- Memperbarui gambar yang dipakai oleh deployment AKS
Karena tidak ada perubahan yang dilakukan pada kode aplikasi, antarmuka pengguna web tidak berubah.
Setelah pekerjaan build selesai, pilih build #1 di bawah riwayat build. Pilih Output Konsol dan lihat output dari proses build. Baris akhir harus menunjukkan pembangunan yang berhasil.
Membuat webhook GitHub
Dengan build manual yang sukses lengkap, sekarang integrasikan GitHub ke dalam build Jenkins. Gunakan webhook untuk menjalankan pekerjaan build Jenkins setiap kali kode diterapkan ke GitHub.
Untuk membuat webhook GitHub, selesaikan langkah-langkah berikut:
Telusuri ke repositori GitHub yang telah Anda fork di browser web.
Pilih Pengaturan, lalu pilih Webhook di sisi kiri.
Pilih untuk Menambahkan webhook. Untuk URL Payload, masukkan
http://<publicIp:8080>/github-webhook/, di mana<publicIp>adalah alamat IP server Jenkins. Pastikan untuk menyertakan yang terakhir/. Biarkan default lainnya untuk jenis konten dan untuk memicu peristiwa push.Pilih Tambahkan webhook.
Menguji alur CI/CD lengkap
Sekarang Anda dapat menguji seluruh alur CI/CD. Saat Anda mendorong penerapan kode ke GitHub, langkah-langkah berikut terjadi:
- Webhook GitHub menginformasikan Jenkins.
- Jenkins memulai pekerjaan build dan menarik penerapan kode terbaru dari GitHub.
- Build Docker dimulai menggunakan kode yang diperbarui, dan gambar kontainer baru ditandai dengan nomor build terbaru.
- Gambar kontainer baru ini didorong ke Azure Container Registry.
- Aplikasi Anda yang berjalan di Azure Kubernetes Service diperbarui dengan gambar terbaru dari Azure Container Registry.
Pada komputer pengembangan Anda, buka aplikasi kloning dengan editor kode. Di bawah direktori /azure-vote/azure-vote , buka file bernama config_file.cfg. Perbarui nilai suara dalam file ini ke sesuatu selain kucing dan anjing, seperti yang ditunjukkan dalam contoh berikut:
# UI Configurations
TITLE = 'Azure Voting App'
VOTE1VALUE = 'Blue'
VOTE2VALUE = 'Purple'
SHOWHOST = 'false'
Saat diperbarui, simpan file, terapkan perubahan, dan dorong ke fork repositori GitHub Anda. Webhook GitHub memicu pekerjaan build baru di Jenkins. Di dasbor web Jenkins, pantau proses build. Hanya butuh beberapa detik untuk mengambil kode terbaru, membuat dan mengirim gambar terbaru, serta menyebarkan aplikasi terbaru di AKS.
Setelah build selesai, refresh browser web Anda dari sampel aplikasi pemungutan suara Azure. Perubahan Anda ditampilkan, seperti yang ditunjukkan dalam contoh berikut: