我正在尝试编写一个 gitlab ci 作业规则,当只有
CHANGELOG.md
提交到默认分支时,该规则不会运行。但是,如果 CHANGELOG.md
与提交中的其他文件一起更新,则运行该作业。这可能吗?谢谢!
这件事的背景是我正在使用 backmerge 插件进行语义发布。如果被反向合并的提交只是更新 CHANGELOG.md,那么不要运行管道。但是如果有其他文件被反向合并,那么请运行管道。
对于 gitlab ci 规则,我正在努力想出一些可以完成任务的东西。
before_script
来检查您的条件是否满足:
stages:
- build
run_pipeline:
stage: build
script:
- echo "Running pipeline"
rules:
- exists:
- "*"
when: always
before_script:
- |
CHANGELOG_UPDATED=$(git diff --name-only HEAD~1 | grep -E '^CHANGELOG.md$' | wc -l)
OTHER_FILES_CHANGED=$(git diff --name-only HEAD~1 | grep -v -E '^CHANGELOG.md$' | wc -l)
if [ "$CHANGELOG_UPDATED" -eq 1 ] && [ "$OTHER_FILES_CHANGED" -eq 0 ]; then
echo "Only CHANGELOG.md was updated, skipping the job"
exit 0
else
echo "Other files were updated, running the job"
fi
在这里,我们使用带有
rules
和exists
的when: always
关键字来确保当存储库中存在任何文件时作业运行。
before_script
部分检查 CHANGELOG.md
文件是否已更新,以及是否在上次提交中更改了任何其他文件。
如果只更新
CHANGELOG.md
文件,脚本将退出,状态码为0,导致作业被跳过。rules:changes
是相当新的,15.2,我没能成功排除CHANGELOG.md
)