-
Notifications
You must be signed in to change notification settings - Fork 0
GitLab
Règles de base :
.default_rules:
rules:
- if: $CI_COMMIT_REF_NAME == "develop"
- if: $CI_COMMIT_REF_NAME == "release/beta"Héritage :
rules:
- !reference [.default_rules, rules]Attention : Il faut bien écrire default_rules et pas default-rules qui ne fonctionne pas.
Voir l'alternative par composition plutôt que par héritage ci-dessous.
Règles de base :
.rules:
- &rule_only_merge_request
if: $CI_PIPELINE_SOURCE == "merge_request_event"
- &rule_only_develop
if: $CI_COMMIT_BRANCH == "develop"
- &rule_only_releases
if: $CI_COMMIT_BRANCH =~ /^release//i
- &rule_only_tags
if: $CI_COMMIT_TAG
- &rule_except_tags
if: $CI_COMMIT_TAG == nullRéutilisation :
workflow:
rules:
- *rule_only_merge_request
- *rule_only_develop
- *rule_only_releases
- *rule_only_tags rules:
- changes:
- dossier/**/*Attention : ne pas oublier /**/* si on souhaite inclure tous les sous-dossiers et leurs sous-dossiers et ainsi de suite.
Quand on relance un job, les variables GitLab sont bien mises à jour.
TODO : reprendre la conf pour afficher la couverture de test dans les diffs d'une MR.
Si on souhaite changer uniquement certains attributs d'un job déjà existant, il suffit de le redéfinir et de spécifier uniquement les attributs à modifier. Exemple :
# Job déjà existant
job:
stage: ancien-stage
dependencies: anciennes-dependances
# Surcharge du job
job:
stage: nouveau-stageOn pourra vérifier la "Configuration complète" suivante dans "Éditeur de pipeline" GitLab :
job:
stage: nouveau-stage
dependencies: anciennes-dependancesSi on souhaite surcharger plusieurs jobs, on peut utiliser les ancres YAML :
# Surcharges des éléments
.elements-overrides: &elements-overrides
stage: nouveau-stage
# Surcharge des jobs
job1: *elements-overrides
job2: *elements-overrides.gitlab-ci.yml adapté :
# Règles pour déclencher un pipeline
.rules:
- &rule_only_next
if: $CI_COMMIT_BRANCH == "next"
- &rule_only_merge_request
if: $CI_PIPELINE_SOURCE == "merge_request_event"
- &rule_only_master
if: $CI_COMMIT_BRANCH == "master"
workflow:
rules:
- *rule_only_merge_request
- *rule_only_next
- *rule_only_master
variables:
CLI_VERSION: 8.2.14
# La version NPM est dépendante de node SASS donc il faut être prudent si vous modifiez cette version
NPM_VERSION: 6.14.4
# Image docker utilisée par défaut pour les étapes
default:
image: .../debian:bookworm-slim
cache: &default_cache
key: $CI_PROJECT_ID
paths:
- .npm/
- node_modules/
tags:
- ...
interruptible: true
stages:
- test
- deploy
test:
stage: test
extends: .build-app
script:
# Section build
- cat /etc/os-release
- echo "$CI_PROJECT_DIR"
- ls $CI_PROJECT_DIR
- rm -rf $CI_PROJECT_DIR/node_modules
- npm ci --prefer-offline
# Section test
- npm run test
coverage: /Statements\s+:\s+([\d\.]+)%/
artifacts:
reports:
junit: junit.xml
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
paths:
- coverage
# Publication de la couverture de test dans GitLab Pages
pages:
stage: deploy
dependencies:
- test
script:
- mkdir .public
- cp -r coverage/* .public
- mv .public public
artifacts:
paths:
- public
rules:
- *rule_only_masterjest.config.js adapté :
module.exports = {
"coverageReporters": [
"html", // Pour GitLab Pages
"text", // Pour plus de détails dans les logs du job dans GitLab CI
"text-summary", // Pour l'attribut "coverage" du job GitLab CI "test"
"cobertura", // Pour afficher la couverture du code modifié dans la Merge Request GitLab
],
"reporters": [
"default", // Pour suivre l'exécution des tests dans les logs
"jest-junit", // Pour avoir le rapport des tests dans la Merge Request GitLab
]
}