Gitlab CI и Django: Как установить пользовательский пакет с помощью pip

У меня есть проект Django, который имеет много зависимостей, и среди них несколько пользовательских частных пакетов Django, перечисленных в нашем requirements.txt файле в корне проекта.

Я хочу настроить простой CI, который запускает наши тесты каждый раз, когда делается коммит.
Для этого я написал простой .gitlab-ci.yaml файл, который пытается запустить эти тесты, но у меня возникли проблемы с установкой наших пользовательских зависимостей.
Они перечислены в наших требованиях следующим образом:

...
Django==3.2.12
...
-e git+ssh://git@gitlab.com/{organization}/{project}.git@{commit-sha}#egg={project}
-e git+ssh://git@gitlab.com/{organization}/{project}.git@{{commit-sha}#egg={project}
...

Примечание: Все упомянутые проекты находятся под одной организацией Gitlab

Вот как выглядит мой .gitlab-ci.yaml файл:

stages:
  - test

run-test: 
  image: ubuntu:18.04
  stage: test
  before_script: # installing python, pip & installing requirements
    - apt -y update

    - apt -y install apt-utils git net-tools
    - apt -y install python3.8 python3-pip
    - apt -y upgrade
    
    - python3 -m pip install --upgrade pip
    - cd servers/api
    - pip3 install -r ../requirements.txt
  script:
    - python3 manage.py test

Очевидно, что это не удается, выдавая следующую ошибку:

Obtaining {project} from git+ssh://****@gitlab.com/{organization}/{project}.git@{commit-sha}#egg={project} (from -r ../requirements.txt (line 32))
Cloning ssh://****@gitlab.com/{organization}/{project}.git (to revision {commit-sha}) to ./src/{project}
Running command git clone --filter=blob:none -q 'ssh://****@gitlab.com/{organization}/{project}.git' /builds/{organization}/platform/servers/api/src/{project}
  Host key verification failed.
  fatal: Could not read from remote repository.
  Please make sure you have the correct access rights
  and the repository exists.

Прочитав эту тему в документации Gitlab, я попробовал добавить SSH-ключ в смесь, но это тоже не сработало.

Я также нашел это выпуск Gitlab, который, кажется, говорит о той же теме, но он требует создания частного пакета PyPi, и я не совсем уверен, как это сделать, и стоит ли

Любая помощь приветствуется

Исправление установки pip через ssh

Если вы хотите продолжать использовать ssh для установки с помощью pip, вам нужно исправить проблему проверки ключа хоста ssh.

Проверка ключа хоста не удалась.

Вы можете решить эту проблему, установив GIT_SSH_OPTIONS игнорировать проверку ключа хоста.

before_script:
  - export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

Конечно, это не идеально, поскольку вы больше не проверяете личность git-сервера.

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

Вы также можете полностью избежать проблем с ключом хоста, используя HTTPS вместо ssh, используя HTTP basic auth с pip. То есть используйте git+https вместо git+ssh.

Используйте реестр пакетов (рекомендуется!)

Как упоминалось в сообщении, которое вы нашли в своем вопросе, на GitLab есть реестр пакетов PyPI, который позволяет публиковать пакеты Python, а также использовать их с помощью pip. Для этого вам потребуется опубликовать пакеты и настроить (дополнительные) индексные url(ы) в конфигурации pip. В документации описана настройка и использование.

Вернуться на верх