如何设置CI流水线以将Python wheel上传到私有pypi仓库

107次阅读
没有评论

问题描述

想要设置一个CI流水线,将Python wheel发布到私有pypi服务器。他在问题描述中提供了一个示例的发布作业,并解释了他在工作流中遇到的问题。他希望了解其他人是如何处理这种情况的,或者是否有关于这种场景的最佳实践。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

你可以在GitLab CI中使用rules来控制何时执行阶段。通过设置规则,你可以指定只有在特定的分支(如master)上才执行发布操作。你甚至可以使用正则表达式来过滤分支名称。
以下是一个示例的.gitlab-ci.yml文件:

publish:
  image: $PYTHON_IMAGE
  stage: publish
  before_script:
    - poetry install
    - poetry config repositories.nexus-pypi http://my-nexus.com/pypi-internal/
  script:
    - poetry build -f wheel
    - poetry publish -r nexus-pypi -vvv -u $NEXUS_PYPI_USERNAME -p $NEXUS_PYPI_PASSWORD
  rules:
    - if: '$CI_COMMIT_REF_NAME == "master"'

在上面的示例中,我们定义了一个名为publish的作业。通过设置rules,我们指定只有当分支名称为master时才执行发布操作。
请注意,这种方法可能会破坏用户的工作流程,因为他不想等待直到他的更改被审查并最终合并到master分支,而是希望从功能分支中获取版本并进行测试。因此,这种方法可能不适用于他的情况。

方案2

用户选择手动触发上传操作,虽然不完美,但对他来说已经足够了。
另一种方法是手动触发上传操作。用户可以在需要上传的时候手动运行CI流水线,而不是在每次合并请求触发时自动运行。这样可以避免重复上传到pypi的问题。
这种方法可能不是最理想的,但对于用户来说已经足够了。

以上是两种解决方案,你可以根据用户的需求和工作流程选择适合的方法。希望对你有所帮助!

正文完