我正在尝试使用Gitlab CI作业将软件包上传到pypi,但我无法使其工作:/任何人都有一个有效的例子吗?
到目前为止,我在.gitlab-ci.yaml
(从我当地的机器上所有人都在使用)中尝试过:
使用.pypirc
文件
- echo "[distutils]" >> ~/.pypirc
- echo "index-servers =" >> ~/.pypirc
- echo " pypi" >> ~/.pypirc
- echo "" >> ~/.pypirc
- echo "[pypi]" >> ~/.pypirc
- 'echo "repository: https://upload.pypi.org/legacy/" >> ~/.pypirc'
- 'echo "username: ${PYPI_USER}" >> ~/.pypirc'
- 'echo "password: ${PYPI_PASSWORD}" >> ~/.pypirc'
- python3 setup.py check sdist bdist # This will fail if your creds are bad.
- cat ~/.pypirc
- twine upload dist/* --config-file ~/.pypirc
与之前相同,但$VARIABLE
[...]
- 'echo "username: $PYPI_USER" >> ~/.pypirc'
- 'echo "password: $PYPI_PASSWORD" >> ~/.pypirc'
[...]
之前有两个选项,但使用python setup.py ... upload
twine upload dist/* -u $PYPI_USER -p $PYPI_PASSWORD
twine upload dist/*
与TWINE_USERNAME
和TWINE_PASSWORD
个环境变量。 ...并始终获得403 Client Error: Invalid or non-existent authentication information
。我的选择已经用完了......
答案 0 :(得分:2)
我只是使用TWINE_USERNAME
和TWINE_PASSWORD
变量,它开箱即用。
这是gitlab-ci.yml
中的一部分(将图像替换为所需的图像):
pypi:
image: docker.km3net.de/base/python:3
stage: release
cache: {}
script:
- pip install -U twine
- python setup.py sdist
- twine upload dist/*
only:
- tags
并在GitLab中的Settings-> CI / CD-> Variables(https://your-gitlab-instance.oerg/GIT_NAMESPACE/GIT_PROJECT/settings/ci_cd)下添加环境变量:
这是成功的管道:
答案 1 :(得分:1)
如果出现EOF问题,请确保更改要保护的“设置” /“存储库” /“标签”,以便它们可以再次使用。我已经发布了here的完整说明。
答案 2 :(得分:1)
请注意,GitLab 12.10(2020年4月)将使用CI_JOB_TOKEN
以更简单的方式提供其高级版或更高版本(请参见答案的第二部分,与2020年9月的GitLab 13.4一样)>
Build, publish, and share Python packages to the GitLab PyPI Repository
Python开发人员需要一种机制来创建,共享和使用包含使用这些软件包的项目中包含已编译代码和其他内容的软件包。 PyPI是一个由Python Packaging Authority维护的开源项目,是定义,创建,托管和使用Python软件包的标准。
在GitLab 12.10中,我们很自豪地提供直接内置在GitLab中的PyPI存储库!开发人员现在可以使用一种更轻松的方式来发布其项目的Python软件包。通过与PyPI集成,GitLab将提供一个集中的位置,以在与源代码和管道相同的位置存储和查看这些软件包。
3月,我们宣布了GitLab PyPI存储库,并支持其他软件包管理器格式will be moved to open source。
在我们致力于使这些功能更广泛可用的情况下,您可以继续in the epic。
请参见Documentation和Issue。
还有GitLab 13.4(2020年9月)
使用CI_JOB_TOKEN发布PyPI软件包
您可以在源代码和CI / CD管道旁边使用GitLab PyPI存储库来构建,发布和共享python软件包。
但是,以前您无法通过使用预定义的环境变量
CI_JOB_TOKEN
对存储库进行身份验证。
结果,您被迫使用个人凭据来更新PyPI信息库,或者您可能决定完全不使用该信息库。现在,通过使用预定义的
CI_JOB_TOKEN
环境变量,使用GitLab CI / CD来发布和安装PyPI软件包比以往任何时候都容易。请参见Documentation和Issue。
答案 3 :(得分:0)
您也可以考虑使用dpl:这是我的操作方式:
pip:
stage: upload
script:
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- python setup.py sdist
- dpl --provider=pypi --user=$PIP_USERNAME --password=$PIP_PASSWORD --skip_existing=true
only:
- master
您可以在项目的变量部分中设置$PIP_USERNAME
和$PIP_PASSWORD
:settings -> CI/CD -> Variables
答案 4 :(得分:0)
您还可以在一行中将python软件包上传到私有Pypi服务器(我在gilab-ci上使用它):
通过Gitlab CI设置设置环境变量PYPI_SERVER
,PYPI_USER
和PYPI_PASSWORD
致电
twine upload --repository-url ${PYPI_SERVER} --username $PYPI_USER --password $PYPI_PASSWORDD $artifact
注意:我必须使用twine
(PIP
)中的pip3 install twine
,而不要使用我的Ubuntu软件包中的twine
的版本10似乎有一个错误(zipfile.BadZipFile: File is not a zip file
)。