将工件上传到gitlab后如何删除gitlab runner上的工件目录?

How to delete artifacts directory on gitlab runner after uploading them to gitlab?

我正在尝试创建一个显示测试代码覆盖率指标的 gitlab 作业。为此,我正在创建一个 .coverage 文件并将其放在上传工件的目录中。在后续阶段,覆盖工具下载并使用工件以生成覆盖报告。我注意到当 gitlab runner 完成工作并使我的文件系统膨胀时,工件并没有被删除。工件上传后如何删除工件目录?

这是我们目前拥有的

stages:
    - test
    - build

before_script:
    - export GITLAB_ARTIFACT_DIR="$(pwd)"/artifacts

[...]

some-test:
    stage: test
    script:
        - [some script that puts something in ${GITLAB_ARTIFACTS_DIR}
    artifacts:
        expire_in: 4 days
        paths:
            - artifacts/
some-other-test:
    stage: test
    script:
        - [some script that puts something in ${GITLAB_ARTIFACTS_DIR}
    artifacts:
        expire_in: 4 days
        paths:
            - artifacts/

[...]
coverage:
    stage: build
    before_script: 
    script: 
        - [our coverage script]
    coverage: '/TOTAL.*\s+(\d+%)$/'
    artifacts:
        expire_in: 4 days
        paths:
            - artifacts/
        when: always
[...]
after_script:
    - sudo rm -rf "${GITLAB_ARTIFACT_DIR}"

根据 https://gitlab.com/gitlab-org/gitlab-runner/issues/4146 after_script 无法访问 before_scriptscripts 环境变量。

一个解决方案是同时使用 cacheartifact

此配置将根据每个作业执行的作业 ID ($CI_JOB_ID) 创建一个新目录:

stages:
- test

remote:
  stage: test
  script :
      - mkdir cache-$CI_JOB_ID
      - echo hello> cache-$CI_JOB_ID/foo.txt
  cache:
      key: build-cache
      paths:
      - cache-$CI_JOB_ID/
  artifacts:
      paths:
      - cache-$CI_JOB_ID/foo.txt
      expire_in: 1 week

在下一个 运行,之前的 cache-$CI_JOB_ID 将被删除并替换为一个新目录(因为 $CI_JOB_ID 会有所不同)。这将只保留缓存文件的一个实例,直到下一次作业执行。

注意:目录名前需加cache-前缀否则.gitlab-ci.yml无效