gitlab - GitLab CI - 文件内容更改时运行管道
问题描述
我有一个包含多个项目的单一仓库(不是我的设计选择)。
每个项目都有一个.gitlab-ci.yml
设置来在“版本”文件更改时运行管道。这很好,因为用户可以签入stage
或master
(对于热修复),然后创建一个构建并将其部署到测试环境。
问题是当用户从master
to进行合并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/管道仍然不熟悉。任何帮助,将不胜感激!(我对改变单一回购几乎没有发言权)
解决方案
仅当文件更改时,以下内容.gitlab-ci.yml
才会运行 test_job 。version
test_job:
script: echo hello world
rules:
- changes:
- version
见https://docs.gitlab.com/ee/ci/yaml/#ruleschanges
另请参阅 仅运行作业/对路径或文件的修改除外
推荐阅读
- java - 如何修复我的单元测试课程中的错误?
- swift - GKMinmaxStrategist - 不适用于开始移动(Swift 4)
- angular - ng-pick-datetime 日期选择器格式
- c# - 无论.NET Core HttpClient中的有效性如何,如何允许所有https?
- javascript - 将移动菜单默认状态从关闭更改为展开
- python - Python中的Json编码器期望值错误
- python - QCalendarWidget 弹出窗口打开时发出信号?
- facebook-graph-api - 如何获取评论,使用图形 API 在 Facebook 页面上发布评论
- java-9 - Java 平台模块系统 - 保护点是什么?
- azure-language-understanding - 导入 Luis 版本的错误(模型已存在)