问题描述
想要设置一个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的问题。
这种方法可能不是最理想的,但对于用户来说已经足够了。
以上是两种解决方案,你可以根据用户的需求和工作流程选择适合的方法。希望对你有所帮助!
正文完