如果您不需要知道路径,但只需要在特定文件更改时运行特定作业,则使用
only
/changes
.gitlab-ci.yml
配置,例如
docker build:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
only:
changes:
- Dockerfile
- docker/scripts/*
或者,如果您需要获取修改后的脚本的路径,可以使用 gitlab-ci
CI_COMMIT_BEFORE_SHA
和 CI_COMMIT_SHA
环境变量,例如
> git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA
src/countries/gb/homemcr.js
src/countries/gb/kinodigital.js
一些人会发现有用的常见用例。提出合并请求时运行作业。具体来说,对所有发生更改的文件运行 lint。目标分支。
正如答案之一所建议的,我们可以通过
CI_MERGE_REQUEST_TARGET_BRANCH_NAME
变量(预定义变量列表)获取目标分支名称。我们可以使用 git diff --name-only origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
来获取已更改的文件列表。然后通过 xargs
将它们传递给 linter。示例配置可能如下所示。
code_quality:
only:
- merge_requests
script:
- git diff --name-only origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME | xargs <LINT_COMMAND_FOR_FILE>