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

nor*_*ree 6 python environment-variables github-actions github-secret

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

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

但是,输出如下:

environ({
'TEST_ENV': 'hello world',
'TEST_SECRET':'',
...})
Run Code Online (Sandbox Code Playgroud)

由于GitHub 的修订,它似乎不起作用。

根据 @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)'

Run Code Online (Sandbox Code Playgroud)

基本上,这两个步骤的输出相同。可以REPO_SECRET通过,但不能通过ENV_SECRET

在此输入图像描述

输出 在此输入图像描述

nor*_*ree 4

GitHub Actions 中存在三种类型的机密。

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

要访问环境机密,您必须在工作中引用环境。(感谢@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 }} 
Run Code Online (Sandbox Code Playgroud)