`changes` to files does not re-run if a previous stage failed

Imagine a simple .gitlab-ci.yml file with the following

stages:
  - test
  - build

test_job:
  stage: test
  script:
    - exit 1

build_job:
  stage: build
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
      changes:
        - web-app/**/*
  script:
    - echo "Building..."

The first time this pipeline is run, you will see both jobs, however the build_job will not be run because the test_job failed (exit 1).

Correcting the exit 1 (to exit 0, for example) and re-running, you will now only see the test_job because to gitlab, the web-app files havent changed, yet they havent successfully run previously.

So how do you ensure the build_job is run to success??

1 Like