使用 Poetry 从 Github 安装多个私有包并部署密钥

问题描述

我想使用诗歌将多个私有 Github 存储库作为 python 包安装到我的存储库中。这在本地运行 poetry install 时工作正常,因为我将公共 SSH 密钥添加到 Github,这允许诗歌访问私有存储库。问题是我想在我的 CI/CD 管道中安装这些相同的私有包,为此我需要为每个 repo 添加一个部署密钥。正确的部署密钥需要用于正确的存储库,为了使其工作,我需要使用以下格式的一些别名设置配置(我实际上还没有知道这是否真的有效) ):

// /.ssh/config
Host repo-1.github.com
 IdentityFile ~/.ssh/repo-1-deploy-key
Host repo-2.github.com
 IdentityFile ~/.ssh/repo-2-deploy-key

其中 repo-1repo-2 是我需要安装的私有存储库的名称。在本地运行时,pyproject.toml 包需要按以下格式设置:

// pyproject.toml
...
[tool.poetry.dependencies]
repo-1 = { git = "ssh://git@github.com/equinor/repo-1.git" }
repo-2 = { git = "ssh://git@github.com/equinor/repo-2.git" }
...

因为这将允许开发人员在没有任何配置的情况下安装软件包(假设他们有权访问)。然而,对于 CI/CD 管道,URL 需要与 SSH 配置文件中的别名匹配,因此它需要看起来像这样:

// pyproject.toml
...
[tool.poetry.dependencies]
repo-1 = { git = "ssh://git@repo-1.github.com/equinor/repo-1.git" }
repo-2 = { git = "ssh://git@repo-2.github.com/equinor/repo-2.git" }
...

现在,我似乎被困在了如何在同一个 pyproject 文件中包含两个不同的 git 路径?我尝试了以下操作:

//pyproject.toml

[tool.poetry.dependencies]
repo-1 = { git = "ssh://git@repo-1.github.com/equinor/repo-1.git",optional=true }
repo-2 = { git = "ssh://git@repo-2.github.com/equinor/repo-2.git",optional=true }

[tool.poetry.dev-dependencies]
repo-1 = { git = "ssh://git@repo-1.github.com/equinor/repo-1.git" }
repo-2 = { git = "ssh://git@repo-2.github.com/equinor/repo-2.git" }

[tool.poetry.extras]
cicd_modules = ["repo-1","repo-2"]

这样我就可以在本地运行 poetry install,它会使用开发依赖项和 CI/CD 管道中的 poetry install --no-dev --extras cicd_modules 来使用别名路径。可悲的是,这给了我一个 CalledProcessError,因为尽管可选标志设置为 true,但似乎诗歌试图安装可选包。

在这里做错了什么,我是否以某种方式错误地使用了可选标志?有没有更好的方法解决这个问题? 总而言之,我只是希望能够使用诗歌和 Github 在 CI/CD 管道中部署密钥的包安装多个私有存储库,而不会破坏本地安装行为,如果以这种方式或其他更好的方式,我真的没有什么强烈的意见。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...