0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · Pelajaran

CI/CD untuk Monorepo

Jelajahi strategi untuk mengoptimalkan pipeline CI/CD dalam monorepo, termasuk menjalankan tugas secara selektif berdasarkan file yang berubah.

CI/CD untuk Monorepo adalah pelajaran CI/CD with GitHub Actions & DevOps Pipelines gratis di CoddyKit. Ini adalah pelajaran 1 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 CI/CD with GitHub Actions & DevOps Pipelines, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus CI/CD with GitHub Actions & DevOps Pipelines mencakup 4 pelajaran total.

Apa Itu Monorepo?

Monorepo adalah satu repositori yang menyimpan kode untuk banyak proyek atau aplikasi. Alih-alih memiliki repositori terpisah untuk setiap layanan atau pustaka, semuanya berada di satu tempat.

Bayangkan seperti perpustakaan besar dengan banyak buku (proyek) dalam satu gedung (repositori), bukan gedung terpisah untuk setiap buku. Pendekatan ini memiliki kelebihan dan kekurangan, terutama untuk CI/CD.

Tantangan CI/CD pada Monorepo

Meskipun monorepo menawarkan manfaat seperti berbagi kode yang lebih mudah, monorepo dapat menimbulkan tantangan bagi alur CI/CD:

  • Pembangunan Lambat: Jika setiap perubahan memicu pembangunan lengkap dan rangkaian pengujian untuk *semua* proyek, alur menjadi sangat lambat.
  • Pemborosan Sumber Daya: Menjalankan pekerjaan yang tidak berkaitan secara tidak perlu menghabiskan menit pembangunan dan sumber daya.
  • Frustrasi Pengembang: Siklus umpan balik yang panjang dapat memperlambat kecepatan pengembangan.

Kebutuhan akan CI/CD Selektif

Kunci CI/CD monorepo yang efisien adalah selektivitas. Kita ingin alur kita cukup cerdas untuk:

  • Mengidentifikasi *apa* yang telah berubah.
  • Menjalankan pekerjaan CI/CD *hanya* untuk proyek yang terdampak oleh perubahan tersebut.

Pendekatan ini menghemat waktu, mengurangi konsumsi sumber daya, dan memberikan umpan balik yang lebih cepat kepada pengembang.

Pemicu Berdasarkan Jalur: `on.paths`

GitHub Actions menyediakan cara yang andal untuk mencapai selektivitas menggunakan penyaring paths dalam pemicu alur kerja Anda. Anda dapat menentukan direktori atau file yang, ketika berubah, akan memicu alur kerja.

Jika file di luar jalur tersebut berubah, alur kerja tidak akan berjalan. Ini sangat cocok untuk monorepo!

on:
  push:
    branches:
      - main
    paths:
      - 'apps/frontend/**'
      - 'libs/shared/**'

Penyaring Jalur dalam Praktik

Berikut alur kerja sederhana yang hanya berjalan ketika perubahan didorong ke file dalam direktori apps/backend atau ke file README.md tertentu.

Dengan demikian, hanya pengujian atau pembangunan yang relevan untuk layanan backend Anda yang dipicu.

name: Backend CI

on:
  push:
    branches:
      - main
    paths:
      - 'apps/backend/**'
      - 'README.md'

jobs:
  build-backend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build backend app
        run: echo "Building backend..."

Mengabaikan Jalur: `paths-ignore`

Terkadang Anda ingin alur kerja berjalan untuk *sebagian besar* perubahan, tetapi melewatinya jika hanya file tertentu yang diubah (misalnya, dokumentasi atau file log). Penyaring paths-ignore sangat cocok untuk hal ini.

Penyaring ini bekerja mirip dengan paths, tetapi menentukan file yang *tidak boleh* memicu alur kerja.

on:
  pull_request:
    branches:
      - main
    paths-ignore:
      - 'docs/**'
      - '**/*.md'

Menjalankan Seleksi Dinamis dengan `git diff`

Untuk logika yang lebih kompleks, Anda dapat menggunakan perintah Git seperti git diff di dalam langkah alur kerja untuk memeriksa perubahan secara dinamis. Dengan demikian, Anda dapat membuat kondisi khusus.

Misalnya, Anda dapat memeriksa apakah perubahan terjadi dalam folder tertentu dan menetapkan variabel keluaran untuk menentukan apakah pekerjaan berikutnya harus berjalan.

Contoh Eksekusi Pekerjaan Bersyarat

Langkah alur kerja ini menggunakan git diff untuk melihat apakah ada file di bawah apps/api/ yang berubah antara commit saat ini dan cabang dasar. Jika ada, langkah ini menetapkan variabel keluaran api_changed ke 'true'.

Keluaran ini kemudian dapat mengendalikan apakah pekerjaan 'deploy API' berjalan.

jobs:
  check-changes:
    runs-on: ubuntu-latest
    outputs:
      api_changed: ${{ steps.diff.outputs.api_changed }}
    steps:
      - uses: actions/checkout@v4
      - name: Check API changes
        id: diff
        run: |
          if git diff --quiet ${{ github.event.before }} ${{ github.sha }} -- apps/api/;
          then
            echo "api_changed=false" >> $GITHUB_OUTPUT
          else
            echo "api_changed=true" >> $GITHUB_OUTPUT
          fi

  deploy-api:
    needs: check-changes
    if: needs.check-changes.outputs.api_changed == 'true'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy API
        run: echo "Deploying API..."

Struktur Monorepo untuk CI/CD

Struktur monorepo yang terorganisasi sangat menyederhanakan CI/CD selektif. Mengelompokkan file dan proyek terkait ke dalam direktori yang terdefinisi dengan baik memudahkan penggunaan penyaring paths secara efektif.

  • /apps/frontend
  • /apps/backend
  • /libs/shared
  • /docs

Pemisahan yang jelas memungkinkan penargetan alur kerja secara tepat.

Kuis CI/CD Monorepo

Mengoptimalkan CI/CD untuk monorepo sangat penting untuk mempertahankan kecepatan pengembang dan penggunaan sumber daya yang efisien. Pertimbangkan strategi yang paling tepat untuk mengatasi tantangan basis kode besar yang terkonsolidasi.

Ringkasan dan Langkah Berikutnya

Anda telah mempelajari cara mengatasi tantangan CI/CD dalam monorepo dengan menerapkan eksekusi pekerjaan selektif. Dengan menggunakan penyaring paths GitHub Actions dan teknik git diff tingkat lanjut, Anda dapat memastikan alur hanya berjalan sesuai kebutuhan.

Hal ini menghasilkan umpan balik yang lebih cepat, biaya yang lebih rendah, dan pengalaman pengembangan yang lebih lancar. Teruslah mengeksplorasi cara menyempurnakan alur kerja Anda untuk efisiensi yang lebih tinggi!

Pertanyaan yang Sering Diajukan

Apakah pelajaran “CI/CD untuk Monorepo” gratis?

Ya — teks lengkap “CI/CD untuk Monorepo” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus CI/CD with GitHub Actions & DevOps Pipelines, upgrade ke CoddyKit PRO. Kursus CI/CD with GitHub Actions & DevOps Pipelines mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “CI/CD untuk Monorepo”?

Jelajahi strategi untuk mengoptimalkan pipeline CI/CD dalam monorepo, termasuk menjalankan tugas secara selektif berdasarkan file yang berubah. Kamu berlatih CI/CD with GitHub Actions & DevOps Pipelines 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 CI/CD with GitHub Actions & DevOps Pipelines?

Tidak diperlukan pengalaman sebelumnya. CI/CD with GitHub Actions & DevOps Pipelines 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 1 dari 4.

Berapa lama pelajaran “CI/CD untuk Monorepo” 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 CI/CD with GitHub Actions & DevOps Pipelines ini?

Ya. Setiap pelajaran CI/CD with GitHub Actions & DevOps Pipelines 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

  1. CI/CD untuk Monorepo
  2. Alur Kerja Lintas Repositori
  3. Pengelolaan Alur Kerja Terpusat
  4. Pemfilteran Jalur dan Build Selektif
← Kembali ke CI/CD with GitHub Actions & DevOps Pipelines