Python 在 GitHub Actions 上看不到环境变量

问题描述

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

根据 the docs,CI 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: 手动设置其他 env-vars,但它们都对 Python 不可见。通过否定上述测试在本地禁用模块 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 https://stackoverflow.com/q/65382013/147356"
    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 显示 CI 变量按预期定义,并且 actiontest.py script 成功检测到该变量。

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

,

明白了。我正在使用 tox 来运行测试等。结果是 tox 不会复制父环境,除非通过 passenv 指令告诉它。这是清除它的 SO answer

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...