GitLab CI - запуск конвейера при изменении содержимого файла - PullRequest
2 голосов
/ 11 апреля 2020

У меня есть моно-репо с несколькими проектами (не мой выбор дизайна).

Каждый проект имеет настройку .gitlab-ci.yml для запуска конвейера при изменении файла версии. Это хорошо, потому что пользователь может зарегистрироваться на stage или master (для оперативного исправления), а сборка создается и развертывается в тестовой среде.

Проблема заключается в том, что пользователь делает объединение от master до stage и фиксация обратно к stage (чтобы исправить любые исправления). Это заставляет ВСЕ трубопроводы работать; даже для проектов, которые не имеют фактических изменений содержимого.

Как разрешить конвейеру запускаться с master и / или stage, но ТОЛЬКО при изменении содержимого файла версии? Например, когда пользователь меняет номер версии.

Вот пример .gitlab-ci.yml (у меня их 5, по 1 на каждый проект в моно-репо)

#
# 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

... и так далее ...

Я все еще новичок в git, GitLab и CI / конвейерах. Любая помощь будет оценена! (Я мало что могу сказать об изменении моно-репо)

1 Ответ

1 голос
/ 11 апреля 2020

Следующая .gitlab-ci.yml запустит test_job, только если файл version изменится.

test_job:
  script: echo hello world
  rules:
    - changes:
      - version

См. https://docs.gitlab.com/ee/ci/yaml/#ruleschanges

См. Также Запускать только задания / за исключением изменений в пути или файле

...