如何列出修改后的文件?

时间:2018-10-20 17:27:58

标签: gitlab-ci

每当PR提高时,我就使用运行在.gitlab-ci.yml中定义的脚本。

我想获取自上次提交以来已修改文件的列表。

用例是在大型代码库中运行特定于文件的集成测试。

2 个答案:

答案 0 :(得分:6)

如果您不需要知道路径,而只需要在更改特定文件时才运行特定作业,则可以使用only/changes .gitlab-ci.yml配置,例如

docker build:
  script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
  only:
    changes:
      - Dockerfile
      - docker/scripts/*

或者,如果您需要获取修改后的脚本的路径,则可以使用 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>