Alur kerja CI/CD menggunakan GitOps (Flux v2)

Penyebaran Kubernetes modern berisi beberapa aplikasi, kluster, dan lingkungan. Dengan GitOps, Anda dapat mengelola pengaturan yang rumit ini dengan lebih mudah, melacak status lingkungan Kubernetes yang diinginkan secara deklaratif dengan Git. Dengan menggunakan alat Git umum untuk mendeklarasikan status kluster, Anda dapat meningkatkan akuntabilitas, memfasilitasi penyelidikan kesalahan, dan mengaktifkan otomatisasi untuk mengelola lingkungan.

Gambaran umum konseptual ini menjelaskan GitOps sebagai realitas dalam siklus hidup perubahan aplikasi lengkap menggunakan Azure Arc, Azure Repos, dan Azure Pipelines. Ada juga contoh perubahan aplikasi tunggal ke lingkungan Kubernetes yang dikontrol GitOps.

Arsitektur

Pertimbangkan aplikasi yang disebarkan ke satu atau beberapa lingkungan Kubernetes.

GitOps CI/CD architecture

Repositori aplikasi

Repositori aplikasi berisi kode aplikasi yang dikerjakan pengembang selama perulangan dalam mereka. Templat penyebaran aplikasi hidup di repositori ini dalam bentuk generik, seperti Helm atau Kustomize. Nilai spesifik lingkungan tidak disimpan. Perubahan pada repositori ini memanggil alur PR atau CI yang memulai proses penyebaran.

Registri kontainer

Registri kontainer menyimpan semua gambar pihak pertama dan ketiga yang digunakan di lingkungan Kubernetes. Tandai gambar aplikasi pihak pertama dengan tag yang dapat dibaca manusia dan penerapan Git yang digunakan untuk membangun gambar. Cache gambar pihak ketiga untuk keamanan, kecepatan, dan ketahanan. Tetapkan rencana untuk pengujian dan integrasi pembaruan keamanan secara tepat waktu. Untuk informasi selengkapnya, lihat panduan ACR Menggunakan dan memelihara konten publik sebagai contoh.

Alur PR

Permintaan pull ke repositori aplikasi terjaga pada keberhasilan eksekusi alur PR. Alur ini menjalankan gerbang kualitas dasar, seperti linting dan pengujian unit pada kode aplikasi. Pipeline menguji aplikasi dan lints Templat Dockerfiles dan Helm yang digunakan untuk penyebaran ke lingkungan Kubernetes. Gambar Docker harus dibangun dan diuji, tetapi tidak dikirim. Pastikan durasi alur relatif singkat untuk memungkinkan perulangan cepat.

Alur CI

Alur CI aplikasi menjalankan semua langkah alur PR, memperluas pengujian dan pemeriksaan penyebaran. Alur dapat dijalankan untuk setiap penerapan ke utama atau dijalankan pada irama reguler dengan sekelompok penerapan.

Pada tahap ini, pengujian aplikasi yang terlalu mengkonsumsi untuk dilakukan dalam alur PR dapat dilakukan, termasuk:

  • Mendorong gambar ke registri kontainer
  • Pembuatan gambar, linting, dan pengujian
  • Pembuatan templat yamls mentah

Pada akhir build CI, artefak dihasilkan yang dapat digunakan oleh langkah CD untuk digunakan sebagai persiapan penyebaran.

Flux

Flux adalah agen yang berjalan di setiap kluster dan bertanggung jawab untuk mempertahankan status yang diinginkan. Agen melakukan polling repositori GitOps pada interval yang ditentukan pengguna dan mendamaikan status kluster dengan status yang dideklarasikan dalam repositori git.

Untuk informasi selengkapnya, lihat tutorial Flux.

Alur CD

Alur CD otomatis dipicu oleh build CI yang berhasil. Dalam lingkungan alur ini, nilai khusus lingkungan diganti ke dalam templat yang diterbitkan sebelumnya, dan permintaan pull baru dinaikkan terhadap repositori GitOps dengan nilai-nilai ini. Permintaan pull ini berisi perubahan yang diusulkan ke status yang diinginkan dari satu atau beberapa kluster Kubernetes. Administrator kluster meninjau permintaan pull dan menyetujui penggabungan ke repositori GitOps. Alur menunggu permintaan pull digabungkan, setelah itu Flux menyinkronkan dan menerapkan perubahan status.

Repositori GitOps

Repositori GitOps mewakili status yang diinginkan saat ini dari semua lingkungan di seluruh kluster. Setiap perubahan pada repositori ini diambil oleh layanan Flux di setiap kluster dan disebarkan. Perubahan pada status kluster yang diinginkan disajikan sebagai permintaan pull, yang kemudian ditinjau, dan akhirnya digabungkan setelah persetujuan perubahan. Permintaan pull ini berisi perubahan pada templat penyebaran dan manifes Kubernetes yang dihasilkan. Manifes render tingkat rendah memungkinkan pemeriksaan perubahan yang lebih hati-hati biasanya tidak terlihat di tingkat templat.

Konektor GitOps

Konektor GitOps membuat koneksi antara agen Flux dan alur Repositori/CD GitOps. Saat menerapkan perubahan pada kluster, Flux memberi tahu konektor GitOps tentang setiap perubahan fase dan pemeriksaan kesehatan yang dilakukan. Komponen ini berfungsi sebagai adaptor. Ini "tahu" cara berkomunikasi ke repositori Git dan memperbarui status penerapan Git sehingga kemajuan sinkronisasi terlihat di repositori GitOps. Ketika penyebaran selesai (baik berhasil atau gagal), konektor memberi tahu alur CD untuk melanjutkan sehingga alur dapat melakukan aktivitas pasca-penyebaran seperti pengujian integrasi.

Kluster Kubernetes

Setidaknya satu kluster Kubernetes atau Azure Kubernetes Service (AKS) dengan dukungan Azure Arc melayani berbagai lingkungan yang diperlukan oleh aplikasi. Misalnya, satu kluster dapat melayani lingkungan dev dan QA melalui namespace layanan yang berbeda. Kluster kedua dapat memberikan pemisahan lingkungan yang lebih mudah dan kontrol yang lebih halus.

Contoh alur kerja

Sebagai pengembang aplikasi, Alice:

  • Menulis kode aplikasi.
  • Menentukan cara menjalankan aplikasi dalam kontainer Docker.
  • Menentukan templat yang menjalankan kontainer dan layanan dependen dalam kluster Kubernetes.

Meski Alice tau bahwa aplikasi membutuhkan kemampuan untuk berjalan di beberapa lingkungan, dia tidak mengetahui pengaturan khusus untuk setiap lingkungan.

Misalkan Alice ingin membuat perubahan aplikasi yang mengubah gambar Docker yang digunakan dalam templat penyebaran aplikasi.

  1. Alice mengubah templat penyebaran, mendorongnya ke cabang jarak jauh yang disebut "alice" di Repositori Aplikasi, dan membuka permintaan pull untuk ditinjau terhadap cabang "utama".
  2. Alice meminta timnya untuk meninjau perubahan tersebut.
    • Alur PR menjalankan validasi.
    • Setelah alur PR berhasil dijalankan dan persetujuan tim, perubahan digabungkan.
  3. Alur CI kemudian dimulai dan memvalidasi perubahan Alice dan berhasil diselesaikan.
    • Perubahan tersebut aman untuk disebarkan ke kluster, dan artefak disimpan ke alur CI yang dijalankan.
  4. Eksekusi alur CI yang berhasil memicu alur CD.
    • Alur CD mengambil artefak yang disimpan oleh alur CI Alice yang dijalankan.
    • Alur CD mengganti templat dengan nilai khusus lingkungan dan tahapan setiap perubahan terhadap status kluster yang ada di repositori GitOps.
    • Alur CD membuat permintaan pull terhadap cabang produksi Repositori GitOps dengan perubahan yang diinginkan pada status kluster.
  5. Tim Alice meninjau dan menyetujui permintaan pull-nya.
    • Perubahan digabungkan ke dalam cabang target yang sesuai dengan lingkungan.
  6. Dalam beberapa menit, Flux melihat perubahan repositori GitOps dan menarik perubahan Alice.
    • Karena perubahan gambar Docker, pod aplikasi memerlukan pembaruan.
    • Flux menerapkan perubahan pada kluster.
    • Flux melaporkan status penyebaran kembali ke repositori GitOps melalui Konektor GitOps.
  7. Alur CD menjalankan pengujian otomatis untuk memverifikasi penyebaran baru berhasil diselesaikan dan berfungsi seperti yang diharapkan.

    Catatan

    Untuk lingkungan tambahan yang ditargetkan untuk penyebaran, alur CD melakukan iterasi dengan membuat permintaan pull untuk lingkungan berikutnya dan mengulangi langkah 4-7. Proses ini banyak membutuhkan persetujuan tambahan untuk penyebaran atau lingkungan yang lebih berisiko, seperti perubahan terkait keamanan atau lingkungan produksi.

  8. Ketika semua lingkungan telah menerima penyebaran yang berhasil, alur selesai.

Langkah berikutnya

Pelajari tentang membuat koneksi antara kluster Anda dan repositori Git dengan konfigurasi Flux.