答案 0 :(得分:6)
如果您不需要知道路径,而只需要在更改特定文件时才运行特定作业,则可以使用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
and CI_COMMIT_SHA
environment variables,例如
> git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA
src/countries/gb/homemcr.js
src/countries/gb/kinodigital.js
答案 1 :(得分:0)
一些人会发现有用的常见用例。提出合并请求时运行作业。具体来说,对所有经过w.r.t更改的文件运行lint。目标分支。
正如答案之一所示,我们可以通过CI_MERGE_REQUEST_TARGET_BRANCH_NAME
变量(list of predefined variables)获得目标分支名称。我们可以使用git diff --name-only origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
来获取已更改文件的列表。然后通过xargs
将它们传递给短绒。示例配置可能如下所示。
code_quality:
only:
- merge_requests
script:
- git diff --name-only origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME | xargs <LINT_COMMAND_FOR_FILE>