将工件上传到gitlab后,如何删除gitlab运行程序上的工件目录?

时间:2019-05-22 20:51:17

标签: gitlab gitlab-ci-runner

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

这是我们目前拥有的

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环境变量。

1 个答案:

答案 0 :(得分:1)

一种解决方案可能是同时使用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无效。