Gitlab CI, артефакты

Я делаю свой первый проект 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" начинается...

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию каждое задание начинается с «чистого» рабочего пространства. Если одно задание изменяет рабочую область, оно не сохраняется ни в одном другом задании. Чтобы передавать файлы между заданиями, вы должны явно объявить артефакты, которые будут передаваться между каждым заданием. Также обратите внимание, что путь к артефакту указывается относительно корня рабочей области.

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).

Другие вопросы по теме