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

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

  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?


person genodeftest    schedule 21.12.2020    source источник


Ответы (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 работа сможет их увидеть.

person gore    schedule 21.12.2020
comment
Спасибо! Исправление вошло в этот запрос на слияние, и теперь у нас есть правильная проверка сборки в мерж-реквесте благодаря вашей помощи! - person genodeftest; 22.12.2020