python - 如何从 Github 工作流程访问环境 secret ?

标签 python environment-variables token github-actions pypi

我正在尝试发布 Python package从 Github 工作流到 PyPI,但“Test PyPI”的身份验证失败。我从命令行成功发布到 Test PyPI,所以我的 API token 必须是正确的。我还检查了 secret 值中的前导和尾随空格(即在 GitHub 上)。
正如上次提交所示,我尝试了一些没有成功的事情。
我首先尝试将简单的 bash 命令内联到工作流程中,如下所示,但我无法将我的 secret 放入环境变量中。当我打印这些变量时,日志中没有显示任何内容。

- name: Publish on Test PyPI 
  env:
     TWINE_USERNAME: __token__
     TWINE_PASSWORD: ${{ secrets.PYPI_TEST_TOKEN }}
     TWINE_REPOSITORY_URL: "https://test.pypi.org/legacy/"
  run: |
     echo "$TWINE_PASSWORD"
     pip install twine
     twine check dist/*
     twine upload dist/*
我还尝试使用专用的 GitHub Action 如下,但它也不起作用。我想问题出在我的工作流程中不可用的 secret 。让我困惑的是my workflow使用另一个 token / secret 就好了!但是,如果我将它放在环境变量中,则不会打印任何内容。我还以不同的名称(PYPI_TEST_TOKEN 和 TEST_PYPI_API_TOKEN)重新创建了我的 secret ,但无济于事。
- name: Publish to Test PyPI
  uses: pypa/gh-action-pypi-publish@release/v1
  with:
    user: __token__
    password: ${{ secrets.TEST_PYPI_API_TOKEN }}
    repository_url: https://test.pypi.org/legacy/
我想我错过了一些明显的东西(像往常一样)。任何帮助都受到高度赞赏。

最佳答案

我终于想通了。我的错误是我在一个环境中定义了我的 secret ,默认情况下,工作流不在任何特定环境中运行。为此,我必须在工作描述中明确命名环境,如下所示:

jobs:
  publish:
    environment: CI    # <--- /!\ Here is the link to the environment
    needs: build
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/v')
    steps:
    - uses: actions/checkout@v2
    # Some more steps here ...
    - name: Publish to Test PyPI
      env:
        TWINE_USERNAME: "__token__"
        TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }}
        TWINE_REPOSITORY_URL: "https://test.pypi.org/legacy/"
      run: |
        echo KEY: '${TWINE_PASSWORD}'
        twine check dist/*
        twine upload --verbose --skip-existing dist/*
documentation实际上提到它。
感谢那些给我指出正确方向的评论。

关于python - 如何从 Github 工作流程访问环境 secret ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66521958/

相关文章:

python - 我应该在 Django Rest Framework 中使用 JWT 还是 Basic Token 身份验证?

python - 当输出超过 2000 行时,pexpect child.before 为空

python - 如何转换为 "end-of-month"?

python - 如何正确检查列表项并记录是否已检查?

node.js - 使用 dynamoose.js 时如何避免将 aws config 设置为外部环境变量

GWT,删除历史标记

python - 无法使用 Selenium、Anaconda3、Python 3.6 查找元素

python - 如何在 PyCharm 的运行/调试配置中将环境变量作为命令行参数传递?

django - 用于 Django 部署的 Azure Web 应用程序不起作用

algorithm - TOTP 算法是否依赖于始终正确同步的客户端时间?