这个问题是关于如何管理私有 gitlab python 包及其嵌套依赖关系的访问权限。这里假定所有访问都是通过直接的 git 仓库模式进行,而非私有包存储库。
任何在gitlab上拥有正确组织成员身份和ssh密钥的用户都可以使用poetry在开发笔记本电脑的python venv中安装package-a及其依赖项package-b,以及它的依赖项package-c。此外,ssh协议访问也适用于docker构建(具有ssh挂载的实验功能)。
然而,具有私有依赖项的同一项目在gitlab-CI运行器中不会被安装,因为它们缺少ssh访问权限。(是否有安全的方式来启用它?)
假设gitlab-CI运行器必须使用访问令牌来克隆私有gitlab存储库,则对project-a的pyproject.toml文件应用sed脚本,以便gitlab-CI运行器可以克隆package-b以发现它依赖于package-c。sed脚本通过编辑pyproject.toml中project-a的依赖规范来将project-b的ssh更改为https访问。
CI_JOB_TOKEN是由GitLab-CI运行程序提供的环境变量,受GitLab-CI运行程序安全管理。因此,GitLab-CI运行程序现在可以在某个位置克隆
package-a
存在于一个私有 gitlab 代码库中,并且它依赖于 package-b
,后者又依赖于 package-c
。这些包同样也存在于私有 gitlab 代码库中。
package-a
的 pyproject.toml
文件如下:[tool.poetry]
name = "package-a"
repository = "https://gitlab.com/org/package_a.git"
[tool.poetry.dependencies]
python = "^3.6"
package-b = {git = "ssh://git@gitlab.com/org/package_b.git", tag = "0.1.0"}
package-b
有一个类似于这样的pyproject.toml
文件:
[tool.poetry]
name = "package-b"
repository = "https://gitlab.com/org/package_b.git"
[tool.poetry.dependencies]
python = "^3.6"
package-c = {git = "ssh://git@gitlab.com/org/package_c.git", tag = "0.1.0"}
任何在gitlab上拥有正确组织成员身份和ssh密钥的用户都可以使用poetry在开发笔记本电脑的python venv中安装package-a及其依赖项package-b,以及它的依赖项package-c。此外,ssh协议访问也适用于docker构建(具有ssh挂载的实验功能)。
然而,具有私有依赖项的同一项目在gitlab-CI运行器中不会被安装,因为它们缺少ssh访问权限。(是否有安全的方式来启用它?)
假设gitlab-CI运行器必须使用访问令牌来克隆私有gitlab存储库,则对project-a的pyproject.toml文件应用sed脚本,以便gitlab-CI运行器可以克隆package-b以发现它依赖于package-c。sed脚本通过编辑pyproject.toml中project-a的依赖规范来将project-b的ssh更改为https访问。
sed -i -e 's#ssh://git@gitlab.com/org#https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/org#g' pyproject.toml
CI_JOB_TOKEN是由GitLab-CI运行程序提供的环境变量,受GitLab-CI运行程序安全管理。因此,GitLab-CI运行程序现在可以在某个位置克隆
project-b
仓库。如果同样的sed技巧也能应用于这个project-b
仓库的某个位置,那么它可能会起作用,但是现在这已经在poetry
的掌握之中,无法触及。所以project-b
对project-c
具有git+ssh依赖关系,但是GitLab-CI运行程序无法安装project-c
,因为它没有git+ssh凭据来克隆它。
因此,在开发和使用具有git+ssh访问权限的笔记本电脑进行Docker构建时,私有包依赖链工作正常,但在GitLab-CI上则全部破损。如何更好地管理所有这些构建环境中的私有包访问?