Как использовать gitlab-ci для управления тестированием / построением взаимозависимых колес

У меня есть 3 пакета Python proj1, proj12 и proj13. И proj12, и proj13 зависят от proj1from proj1.xxx import yyy).

Три проекта находятся в частном экземпляре gitlab, у каждого свой .gitlab-ci.

В proj1 http://gitlab.me.com/group/proj1/.gitlab-ci.yml мы запускаем unittest и создаем колесо, представленное как артефакт:

# http://gitlab.me.com/group/proj1/.gitlab-ci.yml
image: python:2
mytest:
  artifacts:
    paths:
    - dist
  script:
  - apt-get update -qy; apt-get install -y python-dev python-pip
  - pip install -r requirements.txt
  - python setup.py test
  - python setup.py bdist_wheel
look:
  stage: deploy
  script:
  - ls -lah dist

Для proj12 и proj13, например, http://gitlab.me.com/group/proj12/.gitlab-ci.yml мы бы тоже хотели провести тесты, но мне нужно установить proj1 wheel, чтобы он работал.

Все 3 проекта находятся в одной частной группе gitlab.

Как это сделать gitlab?

  • to pass the proj1 wheel to the proj12 with an artifact
    • in this case I don't know how to call/get the artifact in http://gitlab.me.com/group/proj12/.gitlab-ci.yml ? It's the same gitlab, the same group, but a different project.
  • Use a gitlab Secret Variable to store ssh_keys to clone proj2 in proj12/.gitlab-ci.yml ?
    • related to https://gitlab.com/gitlab-org/gitlab-ce/issues/4194
    • при этом не учитывается тот факт, что proj1, proj12 и proj13 находятся в одной gitlab и одной группе, человек, который выполняет сборку для одного проекта, используется в качестве учетных данных для выполнения других. Все 3 связаны личным токеном пользователя.

Я стараюсь избегать развертывания решений типа devpi или pypiserver.

Итак, я ищу, что написать в proj12 .gitlab-ci.yml, чтобы получить dist/proj1-0.42-py2-none-any.whl колесо из предыдущей сборки proj1:

# http://gitlab.me.com/group/proj12/.gitlab-ci.yml
image: python:2
mytest12:
  script:
  - apt-get update -qy; apt-get install -y python-dev python-pip
  - pip install -r requirements.txt
  - pip install .
  - => some way here to get the proj1 wheel 
  - pip install proj1-0.42-py2-none-any.whl
  - python setup.py test

Ссылки, связанные с нашей проблемой:


person user3313834    schedule 07.01.2017    source источник


Ответы (1)


У вас есть два способа сделать это:

  • Передать объект из предыдущей сборки с помощью артефактов (работает внутри того же проекта Только)
  • Создайте образ докера с вашими пакетами, предварительно установленными в задании git, сохраните его во встроенном реестре и используйте его для запуска сборки в других ваших проектах.
  • Клонировать репозиторий

Я бы посоветовал передать его как артефакт, поскольку тогда он будет построен именно в том конвейере, который вы запускаете. Что касается клонирования, AFAIK вам не нужен обходной путь при клонировании подмодулей, но для клонирования других репозиториев я бы пошел с ключом развертывания ssh, поскольку он связан с репо, а не с пользователем, подобным частному токену.

person Jakub Kania    schedule 08.01.2017
comment
Я повлиял на свой вопрос вашими комментариями, я не знаю, что мы можем использовать артефакт, созданный в сборке одного проекта, в .gitlab-ci.yml другого проекта gitlab. - person user3313834; 08.01.2017
comment
@ user3313834 Вы указываете артефакт как путь, он будет доступен по тому же пути в вашей следующей сборке. Ваш путь - dist, поэтому просто сделайте ls dist в качестве первого шага в вашей следующей сборке, и вы это увидите. - person Jakub Kania; 09.01.2017
comment
Да, я очень внимательно прочитал документацию по артефакту gitlab, артефакты находятся на пути того же контейнера, доступного только для задания того же gitlab-ci.yml в тот же проект. Нам нужен артефакт, созданный в proj1, доступный в proj12, другой проект gitlab, другой репозиторий git. Я, наверное, что-то упускаю, но в документации, на которую вы указываете, есть артефакт, связанный с работой того же проекта. - person user3313834; 09.01.2017
comment
@ user3313834 Ааааа, пропустил часть про этот же проект. Верный. Хотя это напоминает мне, что я забыл о кастомных контейнерах докеров. - person Jakub Kania; 09.01.2017