Pemfilteran Jalur dan Build Selektif
Picu hanya alur kerja dan tugas yang terdampak perubahan menggunakan filter jalur, deteksi perubahan, dan matriks kondisional dalam monorepo serta pengaturan multirepo.
Pemfilteran Jalur dan Build Selektif adalah pelajaran DevOps Bootcamp gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar DevOps Bootcamp, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus DevOps Bootcamp mencakup 4 pelajaran total.
Masalah Build yang Terbuang
Dalam monorepo, perubahan pada dokumentasi seharusnya tidak membuat backend, frontend, dan aplikasi seluler dibangun serta di-deploy ulang.
Build selektif hanya menjalankan bagian pipeline yang terdampak oleh perubahan, sehingga menghemat waktu dan menit runner.
Filter Path pada Pemicu
Pendekatan paling sederhana adalah filter paths pada pemicu. Workflow hanya berjalan ketika file yang cocok dengan pola mengalami perubahan.
on:
push:
paths:
- 'services/api/**'Mengabaikan Path
Anda juga dapat melakukan kebalikannya dengan paths-ignore: jalankan workflow untuk semuanya kecuali path yang tercantum.
Ini berguna untuk melewati CI jika hanya dokumentasi yang berubah.
on:
push:
paths-ignore:
- 'docs/**'
- '**.md'Batasan Filter Pemicu
Filter pada tingkat pemicu menentukan apakah seluruh workflow berjalan. Namun, dalam monorepo Anda sering kali menginginkan satu workflow yang menentukan job mana yang dijalankan.
Untuk itu, deteksi perubahan di dalam workflow dan tentukan percabangan berdasarkan hasilnya.
Action Deteksi Perubahan
Action dorny/paths-filter memeriksa diff dan menghasilkan nilai boolean untuk setiap kelompok path yang diberi nama.
Job berikutnya membaca keluaran tersebut untuk menentukan apakah harus berjalan.
- uses: dorny/paths-filter@v3
id: changes
with:
filters: |
api:
- 'services/api/**'
web:
- 'services/web/**'Membatasi Job Berdasarkan Perubahan
Job deteksi menyediakan keluaran; job lanjutan menggunakan if bersama konteks needs agar berjalan secara kondisional.
build-api:
needs: detect
if: needs.detect.outputs.api == 'true'
runs-on: ubuntu-latest
steps:
- run: ./build-api.shMenghubungkan Keluaran
Job deteksi harus mendeklarasikan outputs yang meneruskan hasil filter agar dapat dibaca oleh job lain.
detect:
runs-on: ubuntu-latest
outputs:
api: ${{ steps.changes.outputs.api }}
web: ${{ steps.changes.outputs.web }}Matriks Dinamis
Untuk banyak layanan, Anda dapat membuat matriks secara dinamis berdasarkan path yang berubah, sehingga hanya layanan yang berubah yang masuk ke matriks.
Hasilkan daftar JSON dalam satu job dan masukkan daftar tersebut ke matriks job berikutnya.
strategy:
matrix:
service: ${{ fromJSON(needs.detect.outputs.list) }}Git Diff untuk Deteksi
Anda juga dapat mendeteksi perubahan dengan git mentah. Bandingkan commit saat ini dengan basisnya untuk mencantumkan direktori yang berubah.
git diff --name-only origin/main...HEAD | cut -d/ -f1-2 | sort -uPemeriksaan Wajib dan Pelewatan
Waspadalah: jika pemeriksaan status wajib dilewati karena tidak ada perubahan, perlindungan branch dapat memblokir merge karena menunggunya.
Solusinya adalah menambahkan job gerbang terakhir yang selalu berhasil dan menjadi satu-satunya pemeriksaan wajib, dengan merangkum job kondisional.
gate:
needs: [build-api, build-web]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo 'all required jobs resolved'Caching per Paket
Build selektif sangat cocok dipadukan dengan cache per paket. Gunakan lockfile setiap layanan sebagai kunci cache agar perubahan yang tidak berkaitan tidak membatalkannya.
Secara bersama-sama, keduanya menjaga pipeline monorepo tetap cepat meskipun repositori berkembang.
Pemeriksaan Singkat
Uji pemahaman Anda tentang build selektif.
Ringkasan
Anda telah mempelajari cara membangun hanya bagian yang berubah.
pathsdanpaths-ignoremengatur seluruh workflow- Action deteksi perubahan menghasilkan nilai boolean per path
- Job menggunakan
if+needsuntuk berjalan secara kondisional, dan matriks dapat dibuat secara dinamis - Tambahkan job gerbang
always()agar kompatibel dengan pemeriksaan wajib
Build selektif menjaga CI/CD monorepo tetap cepat dan hemat.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pemfilteran Jalur dan Build Selektif” gratis?
Ya — teks lengkap “Pemfilteran Jalur dan Build Selektif” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus DevOps Bootcamp, upgrade ke CoddyKit PRO. Kursus DevOps Bootcamp mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pemfilteran Jalur dan Build Selektif”?
Picu hanya alur kerja dan tugas yang terdampak perubahan menggunakan filter jalur, deteksi perubahan, dan matriks kondisional dalam monorepo serta pengaturan multirepo. Kamu berlatih DevOps Bootcamp dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai DevOps Bootcamp?
Tidak diperlukan pengalaman sebelumnya. DevOps Bootcamp di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pemfilteran Jalur dan Build Selektif” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran DevOps Bootcamp ini?
Ya. Setiap pelajaran DevOps Bootcamp menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- CI/CD untuk Monorepo
- Alur Kerja Lintas Repositori
- Pengelolaan Alur Kerja Terpusat
- Pemfilteran Jalur dan Build Selektif