Я делаю свой первый проект CI, и недавно я запутался в артефактах...
Скажем, у меня есть конфигурация со следующими заданиями:
cleanup_build:
tags:
- block_autotest
stage: cleanup
script:
- Powershell $env:P7_TESTING_INSTALLATION_PATH\client\p7batch.exe --log-level=error --run $env:JOBS_FOLDER_PATH\clear.py
install_block:
tags:
- block_autotest
stage: installation
script:
- Powershell $env:P7_TESTING_INSTALLATION_PATH\client\p7batch.exe --log-level=error --run $env:JOBS_FOLDER_PATH\setup_block.py
Задание «install_block» не следует выполнять, если задание «cleanup_build» завершилось неудачно. Итак, мне нужно создать какой-то артефакт после успешного завершения «cleanup_build», чтобы этот артефакт был виден на этапе «установки» для задания «install_block». В задании «install_block» я мог бы использовать Python для устранения артефакта и обеспечения его существования.
Также я создал специальную папку для артефактов:
ARTEFACTS_FOLDER_PATH: $CI_PROJECT_DIR\autotest\artefacts
Итак, в рамках задания «cleanup_build» я создаю файл «clean» в папке артефактов. Но кажется, что CI перезагружает репозиторий в каталоге проекта, потому что если я оставлю только задание «cleanup_build» (удалю «install_block» из yml), я смогу увидеть «чистый» файл в проекте, но если я оставлю оба задания, этот файл исчезнет раньше Задание "install_block" начинается...
По умолчанию каждое задание начинается с «чистого» рабочего пространства. Если одно задание изменяет рабочую область, оно не сохраняется ни в одном другом задании. Чтобы передавать файлы между заданиями, вы должны явно объявить артефакты, которые будут передаваться между каждым заданием. Также обратите внимание, что путь к артефакту указывается относительно корня рабочей области.
stages:
- one
- two
my_job:
stage: one
script:
- echo "change" > myfile.txt
artifacts:
paths:
# this must be a relative path, not absolute!
- myfile.txt
my_next_job:
stage: two
script:
# or use 'type' instead of 'cat' on Windows
- cat myfile.txt
Когда задание с определенным artifacts:
завершится, в конце журнала задания вы увидите сообщение с указанием количества сопоставленных/загруженных артефактов.
Также обратите внимание, что по умолчанию в случае сбоя задания последующие задания не будут выполняться. То есть: когда: поведение on_success
по умолчанию. Вы можете включить дополнительный запуск заданий (или только) в случае сбоев, используя when: always
(или when: on_failure
).