Passer au contenu principal

CI/CD (GitLab)

Pipelines avances

Au-dela du pipeline lineaire de base, GitLab propose des mecanismes de composition et de decomposition des pipelines : includes, parent/child, multi-project pipelines et les matrices de jobs.

Include

Le mot-cle include permet de decomposer le .gitlab-ci.yml en plusieurs fichiers, locaux ou distants :

include:
  - local: .gitlab/ci/build.yml
  - local: .gitlab/ci/test.yml
  - project: company/shared-ci
    ref: main
    file: /templates/security.yml
  - remote: https://example.com/ci/template.yml
  - template: Security/SAST.gitlab-ci.yml

Les templates GitLab (template:) sont des fichiers CI maintenus par GitLab dans le projet gitlab-org/gitlab. Ils couvrent SAST, DAST, dependency scanning, licence compliance, etc.

Pipelines parent/child

Un job peut declencher un pipeline enfant defini dans un autre fichier YAML. Le pipeline enfant s'execute dans le contexte du meme projet et commit :

trigger-backend:
  trigger:
    include: backend/.gitlab-ci.yml
    strategy: depend  # le pipeline parent attend la fin du child

Utile pour les monorepos : un pipeline racine orchestre des sous-pipelines par composant.

Multi-project pipelines

Un pipeline peut declencher un pipeline dans un autre projet :

trigger-deployment:
  trigger:
    project: ops/infrastructure
    branch: main

Cas d'usage : le pipeline du projet applicatif declenche le pipeline d'infrastructure (Terraform, Ansible) une fois le build valide.

Matrix jobs

La directive parallel:matrix genere automatiquement plusieurs instances d'un job avec des variables differentes :

test-compatibility:
  script:
    - ./test.sh $PYTHON_VERSION $DB_VERSION
  parallel:
    matrix:
      - PYTHON_VERSION: ["3.10", "3.11", "3.12"]
        DB_VERSION: ["14", "15", "16"]

Cela genere 9 jobs (3x3) executes en parallele. Les resultats sont groupes dans l'interface.

Trigger API et tokens

Les pipelines peuvent etre declenches depuis l'exterieur via l'API REST avec un trigger token :

curl -X POST   --form token=TRIGGER_TOKEN   --form ref=main   --form "variables[ENV]=production"   https://gitlab.example.com/api/v4/projects/PROJECT_ID/trigger/pipeline

Depuis GitLab 16, les pipeline trigger tokens sont geres dans Settings > CI/CD > Pipeline triggers.

Sources