在 GItlab-CI 中,仅当
$APP
等于“my-app” 并且文件 file.txt
与上次提交相比已更改时,我才尝试开始工作。
目前我的 .gitlab-ci.yml 文件如下所示:
stages:
- install_dependencies
- build
variables:
APP_NAME: "my-app"
install_dependencies:
stage: install_dependencies
image: doesnt matter
script:
- echo "Installing dependencies..."
rules:
- if: '$APP == "my-app"'
changes:
path:
- file.txt
compare_to: '$CI_COMMIT_BEFORE_SHA'
build:
stage: build
image: doesnt matter
script:
- echo "Building my app..."
dependencies:
- install_dependencies
我尝试将 compare_to
更改为每个选项(例如:
HEAD~
、
HEAD^
、
refs/heads/$CI_COMMIT_BEFORE_SHA
、
refs/heads/$CI_COMMIT_BRANCH
等),但对我来说没有任何效果。我认为
compare_to
有问题。有人知道我怎样才能实现这个目标吗?
compare_to
功能,但似乎不支持变量扩展 - 请参阅#369916。 但是,根据我的理解,您的用例应该在没有
compare_to
的情况下工作,但不适用于合并请求管道。在分支/标签上的管道(与合并请求无关的管道)中,仅应评估最新的提交:
没有显式关联的分支或标签上的管道 对于合并请求,使用先前的 SHA 来计算差异。这 计算相当于 git diff HEAD~ 会导致意外 行为,包括:为了避免在推送新分支时更改始终评估为 true,您可以将
当推送新分支或 GitLab 的新标签。
- 当推送新的提交时,更改的文件是 使用之前的提交作为基础 SHA 进行计算。
CI_COMMIT_BEFORE_SHA
与
0000000000000000000000000000000000000000
进行比较,请参阅CI_COMMIT_BEFORE_SHA。 对于合并请求管道,我想您需要在
script
中手动进行检查,如果更改不包括您的文件,则以 0 退出。像
git --no-pager diff --name-only HEAD HEAD~1
这样的东西可能有助于在最新提交中更改文件。