将工件上传到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_script
或 scripts
环境变量。
一个解决方案是同时使用 cache
和 artifact
。
此配置将根据每个作业执行的作业 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
无效
我正在尝试创建一个显示测试代码覆盖率指标的 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_script
或 scripts
环境变量。
一个解决方案是同时使用 cache
和 artifact
。
此配置将根据每个作业执行的作业 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
无效