kgaut.net // Développeur web PHP / Drupal freelance
contactez-moi

Gitlab CI - N'exécuter un job que si nécessaire sans impacter les suivants

J'ai déjà expliqué précédement comment passer un job en fonction de fichier modifiés.

Par exemple voici un job (simplifié) qui construit une image docker et la pousse sur le registre gitlab : 

build-image:
  image: docker:latest
  services:
    - docker:dind
  stage: build
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY # Connexion au registre
    - docker build -t "$CI_REGISTRY_IMAGE" .
    - docker push $CI_REGISTRY_IMAGE
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      changes:
        - composer.json
        - composer.lock

Les lignes ci dessous n’exécuterons le job que si les fichiers composer.json et composer.lock contiennent des modifications.

  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      changes:
        - composer.json
        - composer.lock

Ainsi, j’économise du temps si l'image ne doit pas être reconstruite (l'exemple est basique et doit être adapté évidement à votre besoin.)

Maintenant, mon job suivant risque de planter s'il à en prérequis (needs dans le langage gitlab-ci) le job de construction d'image, on aura l'erreur « 'job-qui-suit' job needs 'build-image' job, but 'build-image' is not in any previous stage »

On peut modifier l'instruction needs pour se passer de ce pré-requis s'il n'existe pas, en le marquant comme optionnal :

  needs:
    - job: build-image
      optional: true

 

Contenus en rapport

snippet · 4 Mai 2019 Gitlab CI - Ne lancer une tâche que lorsque que certains fichiers sont modifiés snippet · 27 Mai 2020 Gitlab CI - Avoir un job manuel sans bloquer les suivants snippet · 1 Jun 2020 Gitlab CI - Déclencher des jobs que sur des tags spécifiques snippet · 12 Déc 2022 Gitlab ci - Passer un job en fonction du message de commit

Commentaires (0)