【问题标题】:How to access environment secrets from a Github workflow?如何从 Github 工作流访问环境机密?
【发布时间】:2021-06-05 20:53:14
【问题描述】:

我正在尝试从 Github 工作流程将Python package 发布到 PyPI,但“Test PyPI”的身份验证失败。我从命令行成功发布到 Test PyPI,所以我的 API 令牌必须是正确的。我还检查了秘密值中的前导和尾随空格(即在 GitHub 上)。

正如上次提交所显示的,我尝试了一些事情但没有成功。

我首先尝试将简单的 bash 命令内联到工作流中,如下所示,但我无法将我的秘密放入环境变量中。当我打印这些变量时,日志中没有任何显示。

- 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,但它也不起作用。我想问题出在我的工作流程中不可用的秘密。令我困惑的是my workflow 使用另一个令牌/秘密就好了!但是,如果我将它放在环境变量中,则不会打印任何内容。我还以不同的名称(PYPI_TEST_TOKEN 和 TEST_PYPI_API_TOKEN)重新创建了我的秘密,但无济于事。

- 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/

我想我错过了一些明显的东西(像往常一样)。非常感谢任何帮助。

【问题讨论】:

  • 秘密变量是否显示在github.com/username/repo/settings/secrets/actions上?
  • 至于 this run 使用专用操作:“发布到测试 PyPI”步骤不显示 password 作为输入,所以我也想问一下,你如何设置秘密?
  • 是的,我确实看到了settings/secrets/actions 下的秘密。它们被列为我创建的“CI”环境的变量以及我添加变量的位置。如果我在存储库级别创建它可以工作的秘密,我可以将它们放在环境变量中,我会在日志中看到“***”。

标签: python environment-variables token github-actions pypi


【解决方案1】:

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

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 确实提到了它。

感谢那些给我指出正确方向的评论。

【讨论】:

  • 似乎我缺少这方面的一部分。如果您有一个存在于多个环境中的秘密FOO,该怎么办。您希望能够访问FOO,这将根据您所在的分支而有所不同。为此,您不会希望创建不同的工作只是为了能够参考该环境中的秘密......我想知道如何做到这一点。
猜你喜欢
  • 2020-03-03
  • 2021-04-17
  • 2022-09-27
  • 2022-10-23
  • 2020-09-29
  • 2021-02-18
  • 2021-11-20
  • 2020-03-12
  • 2020-10-05
相关资源
最近更新 更多