GitLab - Bludwarf/CodeBank GitHub Wiki
rules
Héritage de règles de base
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éutilisation de règles de base
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 == null
Réutilisation :
workflow:
rules:
- *rule_only_merge_request
- *rule_only_develop
- *rule_only_releases
- *rule_only_tags
changes
rules:
- changes:
- dossier/**/*
Attention : ne pas oublier /**/*
si on souhaite inclure tous les sous-dossiers et leurs sous-dossiers et ainsi de suite.
Pipelines
Quand on relance un job, les variables GitLab sont bien mises à jour.
Couverture de test
TODO : reprendre la conf pour afficher la couverture de test dans les diffs d'une MR.
Surcharge de jobs
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-stage
On pourra vérifier la "Configuration complète" suivante dans "Éditeur de pipeline" GitLab :
job:
stage: nouveau-stage
dependencies: anciennes-dependances
Si 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
Jest
.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_master
jest.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
]
}