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. Menggunakan alat Git umum untuk mendeklarasikan status kluster, Anda dapat meningkatkan akuntabilitas, memfasilitasi penyelidikan kesalahan, dan mengaktifkan otomatisasi untuk mengelola lingkungan.

Artikel ini menjelaskan bagaimana GitOps cocok dengan siklus hidup perubahan aplikasi lengkap menggunakan Azure Arc, Azure Repos, dan Azure Pipelines. Ini juga memberikan contoh perubahan aplikasi tunggal ke lingkungan Kubernetes yang dikontrol GitOps.

Sistem

Diagram ini menunjukkan alur kerja CI/CD untuk aplikasi yang disebarkan ke satu atau beberapa lingkungan Kubernetes.

Diagram memperlihatkan arsitektur GITOps CI/CD.

Repositori kode 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 khusus lingkungan tidak disimpan di repositori.

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. Gambar aplikasi pihak pertama ditandai dengan tag yang dapat dibaca manusia dan penerapan Git yang digunakan untuk membangun gambar. Gambar pihak ketiga dapat di-cache untuk membantu keamanan, kecepatan, dan ketahanan. Tetapkan rencana untuk pengujian dan integrasi pembaruan keamanan secara tepat waktu.

Untuk informasi selengkapnya, lihat Cara menggunakan dan memelihara konten publik dengan Tugas Azure Container Registry.

Alur PR

Permintaan pull dari pengembang yang dibuat ke repositori aplikasi terjaga pada eksekusi alur PR yang berhasil. 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 dapat berjalan pada irama biasa dengan sekelompok penerapan.

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

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

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

Ekstensi kluster fluks

Flux adalah agen yang berjalan di setiap kluster sebagai ekstensi kluster. Ekstensi kluster Flux ini bertanggung jawab untuk mempertahankan status yang diinginkan. Agen melakukan polling repositori GitOps pada interval yang ditentukan pengguna, lalu mendamaikan status kluster dengan status yang dideklarasikan dalam repositori Git.

Untuk informasi selengkapnya, lihat Tutorial: Menyebarkan aplikasi menggunakan GitOps dengan Flux v2.

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 dimunculkan terhadap repositori GitOps dengan nilai-nilai ini. Permintaan pull ini berisi perubahan yang diusulkan pada status yang diinginkan dari satu atau beberapa kluster Kubernetes. Administrator kluster meninjau permintaan pull dan menyetujui penggabungan ke repositori GitOps. Alur menunggu permintaan pull untuk 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 dirender yang dihasilkan. Manifes render tingkat rendah memungkinkan pemeriksaan perubahan yang lebih hati-hati biasanya tidak terlihat di tingkat templat.

Konektor GitOps

GitOps Koneksi or membuat koneksi antara agen Flux dan alur Repositori/CD GitOps. Saat perubahan diterapkan pada kluster, Flux memberi tahu konektor GitOps tentang setiap perubahan fase dan pemeriksaan kesehatan yang dilakukan. Komponen ini berfungsi sebagai adaptor. Ini memahami 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.

Alice ingin memastikan aplikasi memiliki kemampuan untuk berjalan di beberapa lingkungan, tetapi dia tidak tahu 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 main terhadap cabang.

  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 memulai 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 mentahapkan perubahan apa pun terhadap status kluster yang ada di repositori GitOps.
    • Alur CD membuat permintaan pull terhadap cabang produksi GitOps Repo 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 gitOps Koneksi or.
  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