如何从 Github 工作流访问环境机密?
Posted
技术标签:
【中文标题】如何从 Github 工作流访问环境机密?【英文标题】:How to access environment secrets from a Github workflow? 【发布时间】: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”环境的变量以及我添加变量的位置。如果我在存储库级别创建它可以工作的秘密,我可以将它们放在环境变量中,我会在日志中看到“***”。
【参考方案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
,这将根据您所在的分支而有所不同。为此,您不会希望创建不同的工作只是为了能够参考该环境中的秘密......我想知道如何做到这一点。以上是关于如何从 Github 工作流访问环境机密?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在使用或不使用 GitHub 工作流的情况下在 Netlify 上的 Flutter Web 部署中使用机密?
使用带有 github 操作的 Flutter Web 时如何访问机密