GitLab CI - Run pipeline when the contents of a file changes

Viewed 4974

I have a mono-repo with several projects (not my design choice).

Each project has a .gitlab-ci.yml setup to run a pipeline when a "version" file is changed. This is nice because a user can check-in to stage or master (for a hot-fix) and a build is created and deployed to a test environment.

The problem is when a user does a merge from master to stage and commits back to stage (to pull in any hot-fixes). This causes ALL the pipelines to run; even for projects that do not have actual content changes.

How do I allow the pipeline to run from master and/or stage but ONLY when the contents of the "version" file change? Like when a user changes the version number.

Here is an example of the .gitlab-ci.yml (I have 5 of these, 1 for each project in the mono-repo)

#
# BUILD-AND-TEST - initial build
#
my-project-build-and-test:
  stage: build-and-test
  script:
    - cd $MY_PROJECT_DIR
    - dotnet restore
    - dotnet build
  only:
    changes:
      - "MyProject/.gitlab-ci.VERSION.yml"
  # no needs: here because this is the first step

#
# PUBLISH
#
my-project-publish:
  stage: publish
  script:
    - cd $MY_PROJECT_DIR
    - dotnet publish --output $MY_PROJECT_OUTPUT_PATH --configuration Release
  only:
    changes:
      - "MyProject/.gitlab-ci.VERSION.yml"
  needs:
    - my-project-build-and-test

... and so on ...

I am still new to git, GitLab, and CI/pipelines. Any help would be appreciated! (I have little say in changing the mono-repo)

1 Answers
Related