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.