#gitlab #gitlab-ci #gitlab-pages
# #gitlab #gitlab-ci #gitlab-страницы
Вопрос:
У меня есть .gitlab-ci.yml
файл, который я хочу использовать для запуска скрипта для проверки запроса на слияние. Тот же сценарий следует использовать в CI, но только там результат должен быть опубликован на страницах gitlab. Кроме того, только для CI результат должен быть кэширован.
Это упрощенная версия текущего .gitlab-ci.yml
:
pages:
stage: deploy
script:
- mkdir public/
- touch public/file.txt
artifacts:
paths:
- public
only:
- master
cache:
paths:
- fdroid
(Реальный код находится в репозитории gitlab fdroid-firefox.)
Есть 2 способа запуска конвейера. В зависимости от этого я хочу или не хочу публиковать на страницах:
- путем проверки запроса на слияние. В этом случае я хочу выполнить
script
часть, но я не хочу публиковать или кэшировать результат (в противном случае любой, у кого есть права на создание запроса на слияние, может перезаписать содержимое страниц gitlab). - с помощью CI (который запускается как после регистрации в
master
ветке, так и по расписанию). В этом случае я хочу, чтобы результат был кэширован, а страницы gitlab были обновлены.
Я уже пытался разделить этапы:
stages:
- build
- deploy
build_repo:
stage: build
script:
- mkdir public/
- touch public/file.txt
pages:
stage: deploy
script: echo "publish to Gitlab pages"
artifacts:
paths:
- public
only:
- master
cache:
paths:
- fdroid
(Исходный .gitlab-ci.yml
файл)
Но, сделав это, pages:deploy
этап потерпел неудачу, потому что у него нет доступа к результату build
этапа. На pages:deploy
этапе отображается символ ошибки, а во всплывающей подсказке написано missing pages artifacts
. (журнал реального мира).
В журнале говорится:
Uploading artifacts for successful job
00:01
Uploading artifacts...
WARNING: public: no matching files
ERROR: No files to upload
Что я делаю не так, что у меня нет доступа к результату этапа сборки?
Как я могу запустить script
раздел в обоих случаях, но все равно развернуть на страницах только из master
ветки?
Ответ №1:
Вы не сохраняете артефакты public
пути в своем задании на сборку. И именно поэтому они отсутствуют на следующем deploy
этапе pages
работы.
У вас есть это:
build_repo:
stage: build
script:
- your script
Попробуйте сохранить артефакты в своем задании на сборку следующим образом:
build_repo:
stage: build
script:
- your script
artifacts:
when: always
paths:
- public
Таким образом, они будут переданы на следующий этап deploy
, и pages
Иов сможет их увидеть.
Комментарии:
1. Спасибо! Исправление вошло в этот запрос на слияние , и теперь у нас есть правильная проверка сборки в запросе на слияние благодаря вашей помощи!