如何将秘密从 GitHub Actions 传递到 python 环境变量?

时间:2021-03-12 02:33:31

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

要在 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 的回答,我对导入 env vars 的两个选项进行了更多探索。

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 不能传递。

enter image description here

输出 enter image description here

2 个答案:

答案 0 :(得分:1)

GitHub Actions 中包含三种类型的机密。

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

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

Actions secrets

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

答案 1 :(得分:0)

您可以尝试以下操作:

  - 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