Мой конвейер состоит из 4 этапов
- build - Должно происходить только при запросах на слияние
- test - Должно происходить только при запросах на слияние * Отчет 1006 *
- - Должен происходить только при слиянии с главным
- выпуском - должно происходить только при слиянии с главным
СБОРКА: на этапе сборки я создаю свой тестовый контейнер и загружаю его в реестр контейнеров.
ТЕСТ: На этапе тестирования я запускаю тесты в контейнере, копирую отчет о покрытии из контейнера и создаю артефакты для всего каталога отчетов.
ОТЧЕТ: На этапе создания отчетов я хочу скопировать артефакт из моей стадии отчета в каталог страницы Gitlab, чтобы мы могли просмотреть отчет.
RELEASE: Применяется ли план терраформирования и создается ли производственный контейнер.
Поскольку мои стадии отчета и выпуска отделены, я Я не могу загрузить артефакт, созданный на другом этапе. Моя работа - загрузить текущий отчет cov в /public/<commit-sha>
, а затем переместить его в /public
после успешного слияния с master. Возможно, это не лучшее решение, но у меня ограниченные знания о конвейерах gitlab.
Проблема, с которой я столкнулся, довольно странная.
pages:
stage: report
dependencies:
- unittest
script:
- if [ "$CI_COMMIT_REF_NAME" == "master" ]; then mv public/$CI_COMMIT_SHA public/; else mv coverage/ public/$CI_COMMIT_SHA; fi
artifacts:
paths:
- public
expire_in: 30 days
Это жалуется, что mv: can't rename 'coverage/': No such file or directory
Однако это прекрасно работает
pages:
stage: report
dependencies:
- unittest
script:
- mv coverage/ public
artifacts:
paths:
- public
expire_in: 30 days
Если есть более простое решение для передачи артефактов между заданиями, это было бы здорово, но я не уверен, что я упускаю что-то действительно очевидное в моем скрипте.