GitLab CI-文件内容更改时运行管道

时间:2020-04-10 21:21:47

标签: gitlab gitlab-ci gitlab-ci-runner

我有一个包含多个项目的单仓库(不是我的设计选择)。

每个项目都有一个.gitlab-ci.yml设置,可以在更改“版本”文件时运行管道。这很不错,因为用户可以签入stagemaster(以获取修补程序),并且创建了构建并将其部署到测试环境。

问题是,当用户从masterstage合并并提交回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 /管道的新手。任何帮助,将不胜感激! (我在更改Mono-repo上没有发言权)

1 个答案:

答案 0 :(得分:1)

仅当文件.gitlab-ci.yml发生更改时,以下version才会运行test_job。

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

请参见https://docs.gitlab.com/ee/ci/yaml/#ruleschanges

另请参阅 Run jobs only/except for modifications on a path or file