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

tim*_*ofu 3 python pytest tox github-actions

我有一些连接到测试 Postgres DB 的 pytest 测试。这些在当地运作良好。然而,在 GitHub actions 上,没有 Postgres DB,所以我必须禁用具有这些测试的整个模块。

根据文档CI Always set to true.所以我所要做的就是检查 CI 环境变量,并禁用测试模块(如果存在并设置):

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

不起作用。

我尝试过手动设置它,通过 手动设置其他环境变量env:,但它们都不对 Python 可见。通过否定上述测试来本地禁用该模块not os.getenv('CI')可以按预期工作。

可能是什么问题呢?

lar*_*sks 6

您没有向我们展示任何代码,但是如果我使用以下内容设置存储库.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 /sf/ask/4576740941/"
    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
Run Code Online (Sandbox Code Playgroud)

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

import os

if os.getenv('CI'):
    print('Looks like GitHub!')
else:
    print('Maybe running locally?')
Run Code Online (Sandbox Code Playgroud)

这一切似乎都按照记录进行。show环境显示该CI变量已按预期定义,并且actiontest.py 脚本成功检测到该变量。

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