Как правильно связать разные этапы в конвейере CI / CD - PullRequest
0 голосов
/ 09 июля 2019

Я изо всех сил пытаюсь сделать работу простым конвейером CI / CD с зависимостями между этапами. Это мой .gitlab-ci.yml файл:

image: gcc

stages:
    - build
    - test

build_app:
  stage: build
  script:
    - make
    - make install

test_app:
  stage: test
  script:
    - run app ...
  dependencies:
    - build_app

Таким образом, этап сборки скомпилирует приложение и установит его в / usr / local / bin /. В приведенном выше примере произойдет сбой, поскольку на этапе тестирования исполняемый файл не будет найден, даже если он находится в состоянии в зависимости от на этапе сборки (кажется, что он не подключен по умолчанию).

Если я определю /usr/local/bin/app как артефакт , он также потерпит неудачу, поскольку он должен быть относительным и дочерним по отношению к $CI_PROJECT_DIR ( ссылка ).

Так что я сейчас пытаюсь внести в него некоторые изменения, но чувствую, что не очень понимаю, что там происходит. Наконец, я попытался прикрепить скомпилированный файл (APP) в каталог репозитория как артефакт (без использования make install) и вызвал этот двоичный файл для тестирования (например, ./APP вместо APP). Таким образом, это работает, но я чувствую, что мне пришлось отказаться от инструкции make install, а также, что, вероятно, есть гораздо лучший и простой способ реализовать это.

Есть ли рекомендуемый способ выполнения этой задачи?

1 Ответ

0 голосов
/ 11 июля 2019

cache тоже не сработает.Он ограничен (хотя и не задокументирован) теми же ограничениями, что и артефакты.

Обе эти меры безопасности, поскольку в противном случае он обеспечил бы доступ ко всей файловой системе, в которой установлен gitlab-ci-runner.

Решением будет установка двоичного файла по пути относительно вашейпостроить каталог вместо /usr/local/bin/app и использовать artifacts.

...