Gitlab CI & Django:如何使用 pip 安装自定义包
Gitlab CI & Django: How to install custom package with 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 文档中阅读此 topic 我尝试在混合中添加 SSH 密钥,但它也没有用。
我还发现 this Gitlab issue 似乎在谈论相同的主题,但它需要创建 PyPi 私有包,我不太确定该怎么做,如果我应该的话也不行
感谢任何帮助
修复通过 ssh 的 pip 安装
如果您想继续使用 ssh 通过 pip 安装,您需要修复 ssh 主机密钥验证问题。
Host key verification failed.
您可以通过设置 GIT_SSH_OPTIONS
忽略主机密钥验证来解决此问题。
before_script:
- export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
当然,这并不理想,因为您不再验证 git 服务器的身份。
或者,如果您不想跳过主机密钥验证,您可以验证主机密钥,as described here 并将服务器的主机密钥添加到 known_hosts 文件中。
您还可以通过使用 HTTPS 而不是 ssh 来完全避免主机密钥问题,使用 HTTP basic auth with pip。也就是说用git+https
代替git+ssh
.
使用包注册表(推荐!)
如您在问题中发现的 post 中所述,GitLab 有一个 PyPI package registry 允许您发布 Python 包以及将它们与 pip 一起使用。这将要求您发布包并在您的 pip 配置中设置(附加)索引 url(s)。该文档涵盖了设置和使用。
我有一个 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 文档中阅读此 topic 我尝试在混合中添加 SSH 密钥,但它也没有用。
我还发现 this Gitlab issue 似乎在谈论相同的主题,但它需要创建 PyPi 私有包,我不太确定该怎么做,如果我应该的话也不行
感谢任何帮助
修复通过 ssh 的 pip 安装
如果您想继续使用 ssh 通过 pip 安装,您需要修复 ssh 主机密钥验证问题。
Host key verification failed.
您可以通过设置 GIT_SSH_OPTIONS
忽略主机密钥验证来解决此问题。
before_script:
- export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
当然,这并不理想,因为您不再验证 git 服务器的身份。
或者,如果您不想跳过主机密钥验证,您可以验证主机密钥,as described here 并将服务器的主机密钥添加到 known_hosts 文件中。
您还可以通过使用 HTTPS 而不是 ssh 来完全避免主机密钥问题,使用 HTTP basic auth with pip。也就是说用git+https
代替git+ssh
.
使用包注册表(推荐!)
如您在问题中发现的 post 中所述,GitLab 有一个 PyPI package registry 允许您发布 Python 包以及将它们与 pip 一起使用。这将要求您发布包并在您的 pip 配置中设置(附加)索引 url(s)。该文档涵盖了设置和使用。