使用 tox 和 Github 操作访问环境变量
Access env variable with tox and Github Action
TL;DR: 环境变量为空,但我不知道为什么。
我有一个包含本地 .env
文件的回购协议,以及一个 Github 操作工作流,用于在我将提交推送到远程时启动一些工作流。我还将环境文件的秘密作为键值对放在设置/环境秘密中,我的环境文件的每一行都有一个秘密环境。
问题是:当我 运行 在本地进行测试时,一切正常,我的测试套件毫无问题地通过了。
但是,当我推送我的更改并且工作流开始时,它们(覆盖和测试)失败了,因为没有找到秘密 - 并且它对于测试是强制性的 - 即使应该找到它也是如此。
如果它很重要,我会使用 tox 来 运行 我的测试,并且还会在 tox
步骤的 env
块中传递变量。但是,当操作 运行ned 时,tox 输出的(片段)是:
def __init__(self):
token = os.getenv("TELEGRAM_TOKEN", None)
if not token:
> raise ValueError("Missing token!")
E ValueError: Missing token!
我的 coverage.yml
看起来像这样(tests.yml
与 env 块类似):
name: Coverage
on: [push, pull_request]
jobs:
coverage:
name: Coverage
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Setup python
uses: actions/setup-python@v2
with:
python-version: 3.9
- run: pip install tox
- run: tox -e coverage
env:
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
TELEGRAM_CHAT_IDS: ${{ secrets.TELEGRAM_CHAT_IDS }}
编辑:
我还发现默认情况下,tox 会限制作为 env 传递的内容;但是,即使使用 passenv
,我也总是出现同样的错误。
编辑 2:
我的片段 tox.ini
.
[testenv:coverage]
passenv = TELEGRAM_TOKEN TELEGRAM_CHAT_IDS
deps =
-r requirements/base.txt
-r requirements/test.txt
commands =
coverage erase
coverage run
coverage html
coverage xml
coverage report -m
编辑 3:
在尝试 act 和一些 echo
打印后,环境变量似乎是空的,即使它们已设置。谁能告诉我为什么?
问题是没有为作业设置环境(source),所以即使查询正确,变量始终为空;事实上,当我将秘密上传到存储库变量时,它被检测到了。
将 environment: <name>
添加到作业中解决了问题。
TL;DR: 环境变量为空,但我不知道为什么。
我有一个包含本地 .env
文件的回购协议,以及一个 Github 操作工作流,用于在我将提交推送到远程时启动一些工作流。我还将环境文件的秘密作为键值对放在设置/环境秘密中,我的环境文件的每一行都有一个秘密环境。
问题是:当我 运行 在本地进行测试时,一切正常,我的测试套件毫无问题地通过了。 但是,当我推送我的更改并且工作流开始时,它们(覆盖和测试)失败了,因为没有找到秘密 - 并且它对于测试是强制性的 - 即使应该找到它也是如此。
如果它很重要,我会使用 tox 来 运行 我的测试,并且还会在 tox
步骤的 env
块中传递变量。但是,当操作 运行ned 时,tox 输出的(片段)是:
def __init__(self):
token = os.getenv("TELEGRAM_TOKEN", None)
if not token:
> raise ValueError("Missing token!")
E ValueError: Missing token!
我的 coverage.yml
看起来像这样(tests.yml
与 env 块类似):
name: Coverage
on: [push, pull_request]
jobs:
coverage:
name: Coverage
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Setup python
uses: actions/setup-python@v2
with:
python-version: 3.9
- run: pip install tox
- run: tox -e coverage
env:
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
TELEGRAM_CHAT_IDS: ${{ secrets.TELEGRAM_CHAT_IDS }}
编辑:
我还发现默认情况下,tox 会限制作为 env 传递的内容;但是,即使使用 passenv
,我也总是出现同样的错误。
编辑 2:
我的片段 tox.ini
.
[testenv:coverage]
passenv = TELEGRAM_TOKEN TELEGRAM_CHAT_IDS
deps =
-r requirements/base.txt
-r requirements/test.txt
commands =
coverage erase
coverage run
coverage html
coverage xml
coverage report -m
编辑 3:
在尝试 act 和一些 echo
打印后,环境变量似乎是空的,即使它们已设置。谁能告诉我为什么?
问题是没有为作业设置环境(source),所以即使查询正确,变量始终为空;事实上,当我将秘密上传到存储库变量时,它被检测到了。
将 environment: <name>
添加到作业中解决了问题。