You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab CI集成Django:解决pip安装自定义私有依赖包失败问题

解决方案

我之前处理过类似的GitLab CI私有依赖问题,给你几个实用的方案,不用急着搭私有PyPi(当然如果长期维护多个包,PyPi Registry确实是个好选择):

方案1:用GitLab CI_JOB_TOKEN走HTTPS克隆(最推荐)

这是最简单的方法,不用配置任何密钥,靠GitLab内置的CI_JOB_TOKEN就能授权访问同组织的私有仓库。

操作步骤:

  1. 把requirements.txt里的SSH地址改成HTTPS格式,替换成gitlab-ci-token和${CI_JOB_TOKEN}作为用户名和密码:
# 原来的SSH格式
-e git+ssh://git@gitlab.com/{organization}/{project}.git@{commit-sha}#egg={project}

# 修改后的HTTPS格式
-e git+https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/{organization}/{project}.git@{commit-sha}#egg={project}
  1. 不用额外配置,CI_JOB_TOKEN是GitLab自动给流水线注入的环境变量,直接用就行,它会自动拥有访问同组织内私有仓库的权限(前提是项目之间的访问权限已经开启)。

方案2:正确配置SSH密钥访问

如果你非要用SSH协议,那得解决两个问题:让CI runner信任GitLab的主机密钥,同时拥有私有仓库的访问权限。

操作步骤:

  1. 生成无密码SSH密钥:在本地生成一个不需要密码的密钥(CI环境没法手动输密码):
ssh-keygen -t ed25519 -C "ci-runner@your-org.com" -N "" -f ./ci_ssh_key
  1. 添加公钥到GitLab:把生成的ci_ssh_key.pub内容,添加到私有仓库的Settings > Repository > Deploy keys里,需要的话勾选"Allow write access";或者加到组织级的Deploy keys,这样同组织所有仓库都能用。
  2. 在CI里配置SSH:修改.gitlab-ci.yaml的before_script,加上SSH配置步骤:
before_script:
  # 先装依赖...
  - apt -y install openssh-client
  # 创建SSH目录并设置正确权限(SSH对权限要求很严)
  - mkdir -p ~/.ssh
  - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
  - chmod 600 ~/.ssh/id_ed25519
  # 添加GitLab主机密钥到已知主机,解决Host key verification failed的问题
  - ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts
  # 再去装requirements
  - cd servers/api
  - pip3 install -r ../requirements.txt
  1. 把私钥加到GitLab变量:把本地生成的ci_ssh_key内容,添加到项目的Settings > CI/CD > Variables里,变量名设为SSH_PRIVATE_KEY,类型选"Variable"就行(注意粘贴的时候不要丢换行)。

方案3:用GitLab Package Registry(适合长期维护)

如果你的私有包更新频繁,或者需要版本管理,可以把包发布到GitLab的Package Registry,然后像普通PyPi包一样安装。

操作步骤:

  1. 发布包到Registry:在私有包的项目里,执行以下命令(需要用CI_JOB_TOKEN或者个人访问令牌):
pip install twine
python setup.py sdist bdist_wheel
twine upload --repository-url https://gitlab.com/api/v4/projects/{project_id}/packages/pypi dist/*
  1. 修改requirements.txt:添加GitLab的PyPi源,然后直接写包名和版本:
--extra-index-url https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/api/v4/projects/{project_id}/packages/pypi/simple
your-private-package==1.0.0
  1. CI里直接pip install就行,CI_JOB_TOKEN会自动授权访问。

小提示
  • 优先选方案1,省心又安全,完全利用GitLab的内置机制,不用管密钥的事。
  • 用方案2的话,记得给SSH密钥最小权限(比如只读),别给不必要的权限。
  • 不管用哪个方案,都要确保当前项目能访问私有依赖的项目——可以在私有依赖项目的Settings > Repository > Project access里,把当前测试项目加进去,给它开发者或者访客权限。

内容的提问来源于stack exchange,提问作者npa_pos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:52:34