如何使用 Poetry 将 Python 包部署到 Gitlab 包注册表?

Jak*_*sen 6 python gitlab python-poetry

我正在尝试设置Poetry以将包部署到我们内部的 Gitlab 包注册表。根据在线的其他来源,存储库 ID 应该是https://gitlab.com/api/v4/projects/<project id>/packages/pypi,但无论我尝试什么,Poetry 都会返回

[上传
错误] HTTP 错误 404:未找到

任何人得到这个工作?

tpl*_*usk 27

如果您尝试从 GitLab CI 进行部署,GitLab 会自动创建一个用户和令牌组合,可用于在变量gitlab-ci-token中的用户和密码下的 CI 上下文中进行身份验证$CI_JOB_TOKEN

您需要做的就是诗歌特定的操作,即设置诗歌的配置值以了解包注册表是否存在,然后将其传递以进行身份​​验证。所有这些都可以在 CI 配置/脚本中完成。

  script:
    - poetry build
    - poetry config repositories.gitlab "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/pypi"
    - poetry config http-basic.gitlab gitlab-ci-token "$CI_JOB_TOKEN"
    - poetry publish --repository gitlab
Run Code Online (Sandbox Code Playgroud)

如果您从 GitLab CI 外部进行部署,那么您将需要该访问令牌并提供上面脚本中使用的值。


Jak*_*sen 11

我实际上自己完成了这项工作,并且上面的网址是正确的。我的问题是我试图发布到一个组(使用组 ID)而不是一个实际的项目(又名存储库)。

所以这里是如何做到这一点:

  1. 将存储库添加到您的诗歌.toml

    [virtualenvs]
    in-project = true
    [repositories]
    [repositories.my-gitlab]
    url = "https://gitlab.com/api/v4/projects/<your project id>/packages/pypi"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在 gitlab 中生成一个可以读写包存储库的令牌。

  3. 发布包

    poetry publish --repository my-gitlab -u <token-username> -p <token-password>
    
    
    Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 https://gitlab.com/api/v4/projects/${env.CI_PROJECT_ID}/packages/pypi 来避免对项目 ID 进行硬编码。 (5认同)