Pipelines avances et multi-projets 25 min de lecture

Rules avancees et optimisation

Rules avancees

Les rules permettent un controle fin de l'execution des jobs :

deploy-production:
  stage: deploy
  script: ./deploy.sh production
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
      when: manual
      allow_failure: false
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: always
    - when: never

test-mr:
  stage: test
  script: npm test
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      changes:
        - src/**/*
        - tests/**/*
    - when: never

Workflow rules

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_COMMIT_TAG
    - when: never    # Evite les pipelines en double

Optimisation des pipelines

Cache

variables:
  NPM_CACHE: "$CI_PROJECT_DIR/.npm"

test:
  cache:
    key:
      files:
        - package-lock.json
    paths:
      - .npm/
    policy: pull-push
  script:
    - npm ci --cache .npm
    - npm test

Artefacts et dependances

build:
  stage: build
  script: npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 hour

deploy:
  stage: deploy
  dependencies:
    - build    # Telecharge uniquement les artefacts de build
  script: ./deploy.sh

Interruptible

test:
  interruptible: true    # Annule le job si un nouveau commit arrive
  script: npm test
Important : Combinez cache, artefacts avec expire_in et interruptible pour reduire les temps et les couts de CI.