有没有一种方法可以创建 Gitlab 作业 CI 规则,该规则仅在更新一个文件时不运行该作业?

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

我正在尝试编写一个 gitlab ci 作业规则,当只有

CHANGELOG.md
提交到默认分支时,该规则不会运行。但是,如果
CHANGELOG.md
与提交中的其他文件一起更新,则运行该作业。这可能吗?谢谢!

这件事的背景是我正在使用 backmerge 插件进行语义发布。如果被反向合并的提交只是更新 CHANGELOG.md,那么不要运行管道。但是如果有其他文件被反向合并,那么请运行管道。

对于 gitlab ci 规则,我正在努力想出一些可以完成任务的东西。

git gitlab gitlab-ci rules semantic-release
1个回答
0
投票

您可能需要使用

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

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