首页 > 解决方案 > GitLab CI - 文件内容更改时运行管道

问题描述

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

每个项目都有一个.gitlab-ci.yml设置来在“版本”文件更改时运行管道。这很好,因为用户可以签入stagemaster(对于热修复),然后创建一个构建并将其部署到测试环境。

问题是当用户从masterto进行合并stage并提交回stage(以拉入任何热修复)时。这会导致所有管道运行;即使对于没有实际内容更改的项目。

如何允许管道从master和/或stage但仅在“版本”文件的内容发生更改时运行?就像用户更改版本号一样。

这是一个示例.gitlab-ci.yml(我有 5 个,mono-repo 中的每个项目都有 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/管道仍然不熟悉。任何帮助,将不胜感激!(我对改变单一回购几乎没有发言权)

标签: gitlabgitlab-cigitlab-ci-runner

解决方案


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

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

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

另请参阅 仅运行作业/对路径或文件的修改除外


推荐阅读