Python 在 GitHub 操作上看不到环境变量

Python not seeing environment variables on GitHub Actions

我有一些连接到测试 Postgres 数据库的 pytest 测试。这些在当地运作良好。但是,在 GitHub 操作中,没有 Postgres 数据库,因此我必须禁用具有这些测试的整个模块。

根据 the docsCI Always set to true. 所以我所要做的就是检查 CI env-var,如果存在并设置测试模块则将其禁用:

if os.getenv('CI'):
    pytest.skip("No PostgreSQL on GH Actions CI/CD", allow_module_level=True)

无效。

我尝试手动设置它,通过 env: 手动设置其他环境变量,但是 Python 可以看到其中的 none。通过否定上述测试 not os.getenv('CI') 在本地禁用模块按预期工作。

可能是什么问题?

您没有向我们展示任何代码,但是如果我使用以下 .github/workflows/environment.yml:

设置存储库
---
name: "Environment test"
on:
  push:
  workflow_dispatch:

jobs:
  show_environment:
    name: "Show environment variables"
    runs-on: ubuntu-latest

    steps:
      - name: "Show environmetn variables"
        run: |
          env

  python_test:
    name: "Reproduce behavior from 
    runs-on: ubuntu-latest

    steps:
      - name: "Checkout repository"
        uses: actions/checkout@v2

      - name: "Set up python"
        uses: actions/setup-python@v2
        with:
          python-version: 3.8

      - name: "Run python script"
        run: |
          python actiontest.py

并将此 actiontest.py 包含在存储库中:

import os

if os.getenv('CI'):
    print('Looks like GitHub!')
else:
    print('Maybe running locally?')

这一切似乎都按照记录工作。 show environment shows that the CI variable is defined as expected, and the actiontest.py script 成功检测到该变量。

如果您看到不同的行为,请在您的问题中包含一个完整的可重现示例,我们很乐意帮助您了解发生了什么。

知道了。我正在使用 tox to run the tests among other things. Turns out tox doesn't copy the parent env unless it's told to via the passenv directive. Here's the SO answer 清除它。