我的仓库目前看起来像这样
.
├── 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
文件中进行更改后,所有管道都被触发。
我猜测我的文件更改规则无法正常工作。需要一些设置方面的帮助
我想我明白了为什么......它正在比较我要合并的分支的更改,所以只要项目a
中至少有一个文件发生更改,它就会
继续检测更改。为了测试这一点,我向父触发器添加了一个
compare_to
来与之前的提交进行比较rules
我在项目之外进行了更改
stages:
- projects
project_a:
stage: triggers
trigger:
include: a/.gitlab-ci.yml
rules:
- changes:
paths:
- a/*
compare_to: abcd1234
,结果发现管道没有运行。
我这边严重捂脸