从Gitlab管道上传到pypi

jgs*_*ogo 7 python pypi gitlab-ci twine

我正在尝试使用Gitlab CI作业将软件包上载到pypi,但我无法使其工作:/任何人都有一个有效的示例?

到目前为止,我.gitlab-ci.yaml在我的机器上尝试过的一切(从我的本地机器上都可以正常工作):

  1. .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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 与以前相同,但有 $VARIABLE

    [...]
    - 'echo "username: $PYPI_USER" >> ~/.pypirc'
    - 'echo "password: $PYPI_PASSWORD" >> ~/.pypirc'
    [...]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用之前有两个选择 python setup.py ... upload

  4. twine upload dist/* -u $PYPI_USER -p $PYPI_PASSWORD
  5. twine upload dist/*室内用TWINE_USERNAMETWINE_PASSWORD环境变量。

...并且总是得到一个403 Client Error: Invalid or non-existent authentication information。我没有其他选择了...

tam*_*gal 6

我只是使用TWINE_USERNAMEand 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
Run Code Online (Sandbox Code Playgroud)

并在GitLab中的Settings-> CI / CD-> Variables(https://your-gitlab-instance.oerg/GIT_NAMESPACE/GIT_PROJECT/settings/ci_cd)下添加环境变量:

GitLab CI / CD变量

这是成功的管道:

PyPI发布管道

  • 编辑:此配置有效,但当您收到“403 无效或不存在的身份验证信息”时。而不是更改密码以避免某些特殊字符,如 $ 和或 %。此致。 (3认同)

Tom*_*mmy 3

我使用您的代码的修改版本得到了这个工作:

pypi:
  stage: upload
  script:
  - pip install twine
  - rm -rf dist
  - echo "[distutils]" >> ~/.pypirc
  - echo "index-servers =" >> ~/.pypirc
  - echo "    nexus" >> ~/.pypirc
  - echo "" >> ~/.pypirc
  - echo "[nexus]" >> ~/.pypirc
  - echo "${PYPI_REPO}" >> ~/.pypirc
  - echo "${PYPI_USER}" >> ~/.pypirc
  - echo "${PYPI_PASSWORD}" >> ~/.pypirc
  - python3 setup.py check sdist bdist  # This will fail if your creds are bad.
  - python setup.py sdist bdist_wheel
  - twine upload -r nexus dist/*.tar.gz
Run Code Online (Sandbox Code Playgroud)

不同之处在于我没有使用“'”并去掉了 yaml 中的冒号;相反,我将秘密的值设置为例如,username: myuser