微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?