9

我想使用诗歌将多个私有 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-1和位置。repo-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本地运行,它会使用开发依赖项并poetry install --no-dev --extras cicd_modules在 CI/CD 管道中使用别名路径。可悲的是,这给了我一个CalledProcessError似乎诗歌试图安装可选包,尽管可选标志设置为 true。

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

4

0 回答 0