У меня есть .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
(Реальный код находится в fdroid- firefox репозиторий gitlab.)
Есть 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
?