Tutorial: Sebarkan dari GitHub ke Azure Kubernetes Service menggunakan Jenkins
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.
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:
- Menyebarkan contoh aplikasi suara Azure ke kluster AKS.
- Buat proyek Jenkins dasar.
- Siapkan info masuk agar Jenkins berinteraksi dengan ACR.
- Buat pekerjaan build Jenkins dan GitHub webhook untuk build otomatis.
- Uji alur CI/CD untuk memperbarui aplikasi di AKS berdasarkan komit kode GitHub.
Prasyarat
Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut:
Pemahaman dasar tentang Kubernetes, Git, CI/CD, dan gambar kontainer
Kluster AKS dan
kubectl
dikonfigurasi dengan Info masuk kluster AKS.Registri Azure Container Registry (ACR), nama server masuk ACR, dan kluster AKS 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 --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang 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 memberikan instans Jenkins Anda sendiri daripada contoh ini dengan cara menggunakan Jenkins, instans Jenkins Anda memerlukan Docker yang diinstal dan dikonfigurasi dan kubectl.
Menyiapkan aplikasi Anda
Pada artikel ini, Anda menggunakan contoh aplikasi suara Azure yang berisi antarmuka web dan Redis untuk penyimpanan data sementara.
Sebelum Anda mengintegrasikan Jenkins dan AKS untuk penyebaran otomatis, persiapkan dan sebarkan aplikasi suara Azure secara manual ke kluster AKS Anda. Penyebaran manual ini memungkinkan Anda melihat aplikasi dalam tindakan.
Catatan
Contoh aplikasi suara Azure menggunakan pod Linux yang dijadwalkan berjalan pada node Linux. Alur yang diuraikan dalam artikel ini juga berfungsi untuk pod Server Windows yang dijadwalkan pada node Server Windows.
Fork repositori GitHub berikut untuk aplikasi sampel - https://github.com/Azure-Samples/azure-voting-app-redis. Untuk melakukan fork repositori ke akun GitHub Anda sendiri, pilih tombol Fork di sudut kanan atas.
Kloning fork ke sistem pengembangan Anda. Pastikan Anda menggunakan URL fork Anda saat mengkloning repo ini:
git clone https://github.com/<your-github-account>/azure-voting-app-redis.git
Ubah ke direktori fork kloning Anda:
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 dibangun. Anda kemudian dapat menggunakan perintah docker images untuk melihat gambar yang dibuat. Tiga citra telah diunduh atau dibuat. Gambar azure-vote-front
berisi aplikasi dan menggunakan gambar nginx-flask
sebagai dasar. 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 Azure Container Registry.
az acr login -n <acrLoginServer>
Ganti <acrLoginServer>
dengan nama server masuk ACR Anda.
Gunakan perintah docker tag untuk menandai gambar dengan nama server login ACR dan nomor versi v1
. Gunakan nama <acrLoginServer>
Anda sendiri 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 masuk 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, Anda dapat menggunakan file manifes Kubernetes di root repo repositori suara Azure. Buka file manifes azure-vote-all-in-one-redis.yaml
dengan editor seperti vi
. Ganti microsoft
dengan nama server login ACR Anda. Nilai ini ditemukan pada baris 60 dari 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 penyeimbang beban Kubernetes dibuat untuk mengekspos aplikasi ke internet. Proses ini memerlukan waktu beberapa menit. Untuk memantau kemajuan penyebaran penyeimbang beban, gunakan perintah kubectl get service dengan argumen --watch
. Saat alamat EXTERNAL-IP berubah dari tertunda menjadi alamat IP, gunakan Control + C
untuk menghentikan proses memantau kubectl.
$ kubectl get service azure-vote-front --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.215.27 <pending> 80:30747/TCP 22s
azure-vote-front LoadBalancer 10.0.215.27 40.117.57.239 80:30747/TCP 2m
Untuk melihat aplikasi yang sedang berjalan, buka browser web ke alamat IP eksternal layanan Anda. Aplikasi pemilihan Azure ditampilkan, seperti yang ditunjukkan dalam contoh berikut:
Mengonfigurasi Pengontrol Jenkins
Terapkan perubahan berikut untuk mengaktifkan penyebaran AKS dari Jenkins Controller:
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 menjadi Jenkins Controller
ssh azureuser@<PublicIPAddres>
Ganti <PublicIPAddress>
dengan alamat IP Dari Jenkins Controller.
Instal & Masuk ke AzCLI
curl -L https://aka.ms/InstallAzureCli | bash
az login
Catatan
Untuk menginstal AzCLI secara manual, ikuti petunjuk ini.
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;
Menginstal Kubectl dan Menghubungkan 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 menahan nama server masuk ACR. Variabel ini direferensikan selama pekerjaan build Jenkins. Untuk membuat variabel lingkungan ini, selesaikan langkah berikut:
Di sisi kiri portal Jenkins, pilih Kelola Jenkins>Konfigurasikan Sistem
Di bawah Properti Global, pilih Variabel lingkungan. Tambahkan variabel dengan nama
ACR_LOGINSERVER
dan nilai server masuk ACR Anda.Setelah selesai, pilih Simpan di bagian bawah halaman.
Membuat info masuk Jenkins untuk ACR
Selama proses CI / CD, Jenkins membuat gambar kontainer baru berdasarkan pembaruan aplikasi, dan kemudian perlu mendorong gambar-gambar itu ke registri ACR.
Untuk memungkinkan Jenkins mendorong gambar kontainer yang diperbarui ke ACR, Anda perlu menentukan info masuk untuk ACR.
Untuk pemisahan peran dan izin, konfigurasikan perwakilan layanan untuk Jenkins dengan izin Kontributor ke registri ACR Anda.
Membuat perwakilan layanan agar Jenkins dapat menggunakan ACR
Buat perwakilan 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 info masuk 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 menetapkan hak Kontributor perwakilan layanan ke registri ACR.
az role assignment create --assignee <appID> --role Contributor --scope $ACR_ID
Ganti <appId>
dengan nilai yang disediakan dalam output dari penggunaan perintah pervious untuk membuat perwakilan layanan.
Membuat sumber daya info masuk di Jenkins untuk perwakilan layanan ACR
Dengan penetapan peran yang dibuat di Azure, sekarang simpan info masuk ACR Anda di objek info masuk Jenkins. Info masuk ini direferensikan selama pekerjaan build Jenkins.
Kembali di sisi kiri portal Jenkins, pilih Kelola Jenkins>Kelola Info Masuk>Penyimpanan Jenkins>Info masuk global (tidak terbatas)>Tambahkan Info Masuk
Pastikan jenis info masuk adalah Nama Pengguna dengan kata sandi dan masukkan item berikut:
- Nama pengguna - AppId dari perwakilan layanan yang dibuat untuk autentikasi dengan registri ACR Anda.
- Kata sandi - Kata sandi perwakilan layanan yang dibuat untuk autentikasi dengan registri ACR Anda.
- ID - Pengenal info masuk seperti acr-credentials
Setelah selesai, formulir info masuk terlihat seperti contoh berikut:
Pilih OK dan kembali ke portal Jenkins.
Membuat proyek Jenkins
Dari halaman 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 repo bercabang Anda, seperti https://github.com/<your-github-account>/azure-voting-app-redis
Di bawah bagian Pengelolaan kode sumber, pilih Git, masukkan URL
.git
repo bercabang 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_ID
untuk Variabel Nama Pengguna, danACR_PASSWORD
untuk Variabel Kata Sandi
Pilih untuk menambahkan Langkah Build jenis Jalankan shell dan gunakan teks berikut. Skrip ini membuat 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_NAME
Tambahkan Langkah Build lain dari jenis Jalankan 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_NAME
Setelah selesai, klik Simpan.
Menguji build Jenkins
Sebelum Anda mengotomatiskan pekerjaan berdasarkan GitHub komit, uji build Jenkins secara manual.
Build ini memvalidasi bahwa pekerjaan telah dikonfigurasi dengan benar. Ini menegaskan file autentikasi Kubernetes yang tepat ada, dan autentikasi ke ACR berfungsi.
Pada menu sebelah kiri proyek, pilih Build Now.
Build pertama lebih lama karena lapisan gambar Docker ditarik ke server Jenkins.
Build melakukan tugas-tugas berikut:
- Mengkloning repositori GitHub
- Membuat gambar kontainer baru
- Mendorong gambar kontainer ke registri ACR
- Memperbarui gambar yang digunakan oleh penyebaran AKS
Karena tidak ada perubahan yang dilakukan pada kode aplikasi, UI web tidak berubah.
Setelah pekerjaan build selesai, pilih build #1 di bawah riwayat build. Pilih Output Konsol dan lihat output dari proses pembuatan. Baris terakhir harus menunjukkan build yang sukses.
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 berkomitmen untuk GitHub.
Untuk membuat webhook GitHub, selesaikan langkah-langkah berikut:
Telusuri ke repositori GitHub bercabang Anda di browser web.
Pilih Pengaturan, lalu pilih Webhook di sisi kiri.
Pilih untuk Menambahkan webhook. Untuk URL Payload, masukkan
http://<publicIp:8080>/github-webhook/
, yang mana<publicIp>
alamat IP server Jenkins. Pastikan untuk menyertakan akhiran/
. Biarkan default lainnya untuk tipe konten dan memicu pada peristiwa push.Pilih Tambahkan webhook.
Menguji alur CI/CD lengkap
Sekarang Anda dapat menguji seluruh alur CI/CD. Saat Anda mendorong kode komit ke GitHub, langkah-langkah berikut terjadi:
- Webhook GitHub memberi tahu Jenkins.
- Jenkins memulai pekerjaan membangun dan menarik kode penerapan 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 berjalan di Azure Kubernetes Service diperbarui dengan gambar terbaru dari Azure Container Registry.
Di mesin 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, lakukan perubahan, dan dorong ke garpu repositori GitHub Anda. Webhook GitHub memicu pekerjaan build baru di Jenkins. Di dasbor web Jenkins, pantau proses pembuatannya. Dibutuhkan beberapa detik untuk menarik kode terbaru, membuat dan mendorong gambar yang diperbarui, dan menyebarkan aplikasi yang diperbarui di AKS.
Setelah build selesai, segarkan browser web Anda dari contoh aplikasi suara Azure. Perubahan Anda ditampilkan, seperti yang ditunjukkan dalam contoh berikut:
Langkah berikutnya
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