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

Source

.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
    ]
}