7

У меня есть 3 пакета python proj1, proj12 и proj13. Оба proj12 и proj13 зависят от proj1from proj1.xxx import yyy).Как использовать gitlab-ci для управления испытаниями/строительство взаимозависимых колес

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

В proj1http://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, чтобы оно запустилось.

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

Что такое gitlab Способ для этого?

  • передать proj1 колесо в proj12 с artifact
    • в этом случае я не знаю, как назвать/получить артефакт в http://gitlab.me.com/group/proj12/.gitlab-ci.yml? Это же gitlab, той же группы, но другой проект.
  • Используйте gitlab Secret Variable для хранения ssh_keys клонировать proj2 в proj12/.gitlab-ci.yml?
    • связанные с 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 

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

ответ

1

вы есть два способа вы можете сделать это:

  • Pass the object from previous build using the artifacts (работает внутри того же проекта)
  • построить Docker изображение с вами r пакетов, предварительно установленных в задании git, сохранить их во встроенном реестре и использовать для запуска сборки в других проектах.
  • Clone хранилище

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

+0

Я затронул свой вопрос с вашими комментариями, я не знаю, что мы можем использовать артефакт, созданный в сборке одного проекта в '.gitlab-ci.yml' какого-либо другого проекта gitlab. – user3313834

+0

@ user3313834 Вы поставляете артефакт как путь, он доступен в том же пути в вашей следующей сборке. Вы путь dist, поэтому просто выполните 'ls dist' в качестве первого шага в вашей следующей сборке, и вы это увидите. –

+0

Да, я очень внимательно прочитал документацию артефакт gitlab, артефакт находится на пути ** того же контейнера **, доступного только по заданию ** того же ** gitlab-ci.yml в том же проекте. Нам нужен артефакт, созданный в proj1, доступный в proj12, другом проекте gitlab, другом репозитории git. Я, вероятно, пропустил что-то, но документацию вы указываете на артефакт с работой того же проекта. – user3313834