【问题标题】:How to pass secrets from GitHub Actions to python environ variables?如何将秘密从 GitHub Actions 传递到 python 环境变量?
【发布时间】:2021-06-10 02:04:16
【问题描述】:

要在 GitHub Actions 中运行 pytest,我必须为 Python 运行环境传递一些 secrets。 例如,

  - name: Test env vars for python
    run: python -c 'import os;print(os.environ)'
    env:
      TEST_ENV: 'hello world'
      TEST_SECRET: ${{ secrets.MY_TOKEN }}

但是,输出如下,

environ({
'TEST_ENV': 'hello world',
'TEST_SECRET':'',
...})

由于GitHub's redaction,它似乎无法正常工作。

根据@raspiduino 的回答,我对导入环境变量的两个选项进行了更多探索。

name: python

on: push

jobs:
  test_env:
    runs-on: ubuntu-latest
    steps:
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
        
    - name: Test env vars for python
      run: python -c 'import os;print(os.environ)'
      env:
        ENV_SECRET: ${{ secrets.ENV_SECRET }} 
        REPO_SECRET: ${{ secrets.REPO_SECRET }} 
    
    - name: Test inline env vars for python
      run: ENV_SECRET=${{ secrets.ENV_SECRET }} REPO_SECRET=${{ secrets.REPO_SECRET }} python -c 'import os;print(os.environ)'

基本上,两个步骤都在相同的输出中。 REPO_SECRET 可以传递,但 ENV_SECRET 不能传递。

输出

【问题讨论】:

  • 秘密被编辑从输出,这意味着你的程序可以正确地看到它。如果您绝对需要输出它们,请尝试以某种方式(如 base64)编码以绕过 GitHub 编辑。
  • @iBug 刚刚附上了输出。它们不同于环境和存储库机密。
  • 好的,我想我知道发生了什么。暂时请坚持存储库秘密并远离“环境秘密”。 GitHub 的“环境”不像操作系统。
  • 嗨@northtree,如果你想看看的话,我在这里做了一些非常相似的事情:)github.com/GuillaumeFalourd/ritchie-formulas-scheduler-demo/…

标签: python environment-variables github-actions github-secret


【解决方案1】:

GitHub Actions 中有三种类型的机密。

  1. 组织机密
  2. 存储库机密
  3. 环境机密

要访问环境机密,您必须在工作中referencing an environment。 (感谢@riQQ)

name: python

on: push

jobs:
  test_env:
    environment: TEST_SECRET
    runs-on: ubuntu-latest
    steps:
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
        
    - name: Test env vars for python
      run: python -c 'import os;print(os.environ)'
      env:
        ENV_SECRET: ${{ secrets.ENV_SECRET }} 
        REPO_SECRET: ${{ secrets.REPO_SECRET }} 

【讨论】:

    【解决方案2】:

    你试试下面的方法:

      - name: Test env vars for python
        run: TEST_SECRET=${{ secrets.MY_TOKEN }} python -c 'import os;print(os.environ['TEST_SECRET'])
    

    这会将${{ secrets.MY_TOKEN }}直接作为环境变量传递给python进程,不会与其他进程共享。然后你可以使用os.environ['TEST_SECRET'] 来获取它。

    我已经完成了herehere

    【讨论】:

    • 我尝试了更多关于环境和存储库的秘密。只有Repository secrets 可以通过。你试过Environment secrets吗?
    • @northtree 您需要在工作中引用环境:stackoverflow.com/questions/66521958/…
    猜你喜欢
    • 2021-12-06
    • 2022-01-28
    • 2020-09-29
    • 2020-02-03
    • 2021-03-30
    • 2020-03-03
    • 1970-01-01
    • 2022-06-16
    • 2020-06-06
    相关资源
    最近更新 更多