Как удалить каталог артефактов в gitlab runner после загрузки их в gitlab? - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь создать задание 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_script или scripts переменные окружения.

1 Ответ

1 голос
/ 23 мая 2019

Решением может быть одновременное использование cache и artifact.

Этот конфиг создаст новый каталог в зависимости от идентификатора задания ($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 недопустим.

...