如何为单一存储库设置 GitLab 管道,其中管道仅在文件更改时触发?

问题描述 投票:0回答:1

我的仓库目前看起来像这样

.
├── a/
│   ├── app.js
│   ├── Dockerfile
│   ├── .gitlab-ci.yml
│   └── README.md
├── b/
│   ├── script.sh
│   └── README.md
├── .gitlab-ci.yml
└── README.md

项目

a
有一个包含要运行的作业的管道,但项目
b
没有。请注意,将来我可能会有其他带有管道的项目。我希望每个项目中的管道仅在该项目文件夹中的文件发生更改时触发。我想在合并请求管道和分支管道上运行一些作业,也许将来还会运行其他作业。

我的父母

.gitlab-ci.yml
看起来像这样

stages:
  - projects

project_a:
  stage: triggers
  trigger:
    include: a/.gitlab-ci.yml
  rules:
    - changes:
      - a/*

我的

a/.gitlab-ci.yml
看起来像:

stages:
  - build

build:
  stage: build
  script:
    - echo hello
  rules:
    - when: on_success

我在子管道中具有

when: on_success
的原因是我读到默认情况下管道不会在合并请求上运行,并且添加这样的规则将“修复该问题”。我不知道这是否是最好的解决方案,但添加它后似乎适用于合并请求

无论如何,一切都工作正常,但是在根

README.md
文件中进行更改后,所有管道都被触发。

我猜测我的文件更改规则无法正常工作。需要一些设置方面的帮助

gitlab yaml gitlab-ci pipeline cicd
1个回答
0
投票

我想我明白了为什么......它正在比较我要合并的分支的更改,所以只要项目a中至少有一个文件发生更改,它就会

继续
检测更改。为了测试这一点,我向父触发器添加了一个
compare_to
来与之前的提交进行比较
rules

我在项目之外进行了更改
stages: - projects project_a: stage: triggers trigger: include: a/.gitlab-ci.yml rules: - changes: paths: - a/* compare_to: abcd1234

,结果发现管道没有运行。

我这边严重捂脸

© www.soinside.com 2019 - 2024. All rights reserved.