Gitlab CI: сборка для CI и запроса на слияние, но публикует только CI на страницах

#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 способа запуска конвейера. В зависимости от этого я хочу или не хочу публиковать на страницах:

  1. путем проверки запроса на слияние. В этом случае я хочу выполнить script часть, но я не хочу публиковать или кэшировать результат (в противном случае любой, у кого есть права на создание запроса на слияние, может перезаписать содержимое страниц gitlab).
  2. с помощью 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. Спасибо! Исправление вошло в этот запрос на слияние , и теперь у нас есть правильная проверка сборки в запросе на слияние благодаря вашей помощи!