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

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...