Тест после сборки будет работать в новой среде на gitlab-ci

У меня есть следующая конфигурация как .gitlab-ci.yml но я узнал после успешного прохождения этапа сборки (который создаст виртуальный узел, называемый venv), кажется, что на тестовом этапе вы получите совершенно новую среду (есть нет каталога venv вообще). Так что я должен поставить настройку script в before_script, чтобы он выполнялся на каждой фазе (build/test/deploy). Правильно ли это сделать?

before_script:
  - uname -r 

types:
  - build
  - test
  - deploy

job_install:
  type: build
  script:
    - apt-get update
    - apt-get install -y libncurses5-dev
    - apt-get install -y libxml2-dev libxslt1-dev
    - apt-get install -y python-dev libffi-dev libssl-dev 
    - apt-get install -y python-virtualenv
    - apt-get install -y python-pip
    - virtualenv --no-site-packages venv
    - source venv/bin/activate
    - pip install -q -r requirements.txt
    - ls -al
  only:
    - master

job_test:
  type: test
  script:
    - ls -al
    - source venv/bin/activate
    - cp crawler/settings.sample.py crawler/settings.py
    - cd crawler 
    - py.test -s -v 
  only:
    - master

adasd

Ответ 1

Работы Gitlab CI должны быть независимыми, потому что они могут работать на разных бегунах. Это не проблема. Существует два способа передачи файлов между этапами:

  • Правильный путь. Использование артефактов.
  • Неправильно. Использование кеша. С ключом кэша "взломать". По-прежнему нужен тот же самый бегун.

Итак, да, предположил gitlab, чтобы все, от вашей работы зависит, до script.

Пример артефактов:

  artifacts:
   when: on_success
   expire_in: 1 mos
   paths:
    - some_project_files/

Пример кэша:

cache:
  key: "$CI_BUILD_REF_NAME"
  untracked: true
  paths:
   - node_modules/
   - src/bower_components/

Для правильной рабочей среды я предлагаю использовать докер с изображением, содержащим зависимости apt-get. И используйте артефакты для передачи результатов работы между заданиями. Обратите внимание, что артефакт также загружается на веб-интерфейс gitlab и может его загрузить. Поэтому, если они довольно сильно используют небольшое время expire_in, для их удаления после выполнения всех заданий.