Артефакт недоступен в скрипте - PullRequest
0 голосов
/ 26 мая 2020

Мой конвейер состоит из 4 этапов

  1. build - Должно происходить только при запросах на слияние
  2. test - Должно происходить только при запросах на слияние * Отчет 1006 *
  3. - Должен происходить только при слиянии с главным
  4. выпуском - должно происходить только при слиянии с главным

СБОРКА: на этапе сборки я создаю свой тестовый контейнер и загружаю его в реестр контейнеров.

ТЕСТ: На этапе тестирования я запускаю тесты в контейнере, копирую отчет о покрытии из контейнера и создаю артефакты для всего каталога отчетов.

ОТЧЕТ: На этапе создания отчетов я хочу скопировать артефакт из моей стадии отчета в каталог страницы 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

Если есть более простое решение для передачи артефактов между заданиями, это было бы здорово, но я не уверен, что я упускаю что-то действительно очевидное в моем скрипте.

...