UI vs. UX: What’s the difference?

Menangani Downstream Pipeline GitLab CI/CD pada Monorepo

Dalam penggunaan monorepo di GitLab, kita biasanya memecah konfigurasi .gitlab-ci.yml ke beberapa subfolder. Setiap subproject memiliki file .gitlab-ci.yml tersendiri dan dipanggil (trigger) dari file utama di root repository.

Namun, sering kali muncul error seperti:

Failed - (downstream pipeline can not be created, The resulting pipeline would have been empty. Review the rules configuration for the relevant jobs.)

Artikel ini akan membahas penyebab dan cara mengatasi error tersebut secara step by step.

Masalah Umum

Ketika root pipeline men-trigger pipeline dari folder (downstream), tetapi file .gitlab-ci.yml di dalamnya tidak memiliki job aktif (karena rules tidak terpenuhi), maka GitLab menolak membuat pipeline tersebut karena dianggap kosong.

Contoh konfigurasi trigger di file root:

trigger-project1:
  stage: triggers
  trigger:
    include: project1/.gitlab-ci.yml
  rules:
    - changes:
        - project1/**/*

Masalah:

Jika isi file project1/.gitlab-ci.yml seperti ini:

rules:
  - changes:
      - project1/**

Maka saat pipeline dipicu dari root (tanpa perubahan file), job akan skip, dan pipeline dianggap kosong → error!

Solusi Step by Step

1. Gunakan rules yang mendukung trigger pipeline

Ubah aturan rules di job dalam project1/.gitlab-ci.yml seperti ini:

rules:
  - if: '$CI_PIPELINE_SOURCE == "pipeline"'
  - changes:
      - project1/**

Dengan cara ini, pipeline tetap berjalan meskipun tidak ada perubahan file, selama pipeline dipicu oleh parent/root pipeline.

2. Pastikan urutan rules benar

GitLab membaca rules dari atas ke bawah. Jika rule pertama cocok, rule berikutnya tidak dicek.

Jadi pastikan rule trigger pipeline diletakkan di atas:

rules:
  - if: '$CI_PIPELINE_SOURCE == "pipeline"'   # ⬅️ Ini duluan
  - changes:
      - project1/**

Perbedaan ** dan /**/*

PolaMencakup file di folder root?Subfolder?Aman digunakan?
project1/**✅ Ya✅ Ya✅ Direkomendasikan
project1/**/*✅ Ya✅ Ya✅ Tapi bisa lebih sempit

Gunakan project1/** untuk mencakup perubahan di seluruh folder.

Tips Tambahan

Selalu lint .gitlab-ci.yml kamu di GitLab > CI/CD > Editor > Lint

Simpan SSH key atau token di CI/CD > Variables

Gunakan resource_group jika kamu ingin memastikan deploy tidak berjalan bersamaan

deploy:
  resource_group: deploy-lock

Kesimpulan

Masalah "Downstream pipeline cannot be created" umumnya disebabkan oleh rules yang tidak mengizinkan job dijalankan saat pipeline dipicu oleh parent.

Pastikan:

Tambahkan if: $CI_PIPELINE_SOURCE == "pipeline"

Letakkan if di atas changes

Gunakan ** atau /**/* sesuai kebutuhan folder

Dengan konfigurasi yang benar, monorepo dan multi-pipeline kamu akan berjalan stabil, fleksibel, dan aman.