GitHub Actions中Python脚本读取Secrets存储邮箱凭证的方法
问题根因
你之前工作流配置中env:字段后加|的写法是错误的。管道符|是YAML的块标量语法,作用是把后续缩进的整块内容解析为单一字符串值,不会被识别为键值对形式的环境变量映射。这直接导致两个Secrets的数值没有被正确注入到Python脚本的运行环境中,脚本通过os.environ.get()读取到的是None,最终触发SMTP登录失败、工作流运行报错。
正确配置方案
1. 修正工作流YAML的env语法
去掉env:后面的|,直接按照字典结构映射环境变量即可,修正后的执行步骤配置如下:
- name: execute py script # run sj-gobierno.py to get the latest data env: EMAIL_ADDRESS: ${{ secrets.EMAIL_ADDRESS }} EMAIL_PASSWORD: ${{ secrets.EMAIL_PASSWORD }} run: | python -m pip install --upgrade pip pip install -r requirements.txt python sj-gobierno.py
注意:
run:字段后的|是正确写法,因为run需要接收多行shell命令字符串,符合块标量的使用场景;但env:必须保持字典结构,不能加块标量符号。
2. Python脚本的读取逻辑无需大改
你之前写的通过os.environ.get()读取环境变量的逻辑,和本地跑通时的逻辑完全一致,只需要增加一层判空校验,避免环境变量缺失时直接抛出难以定位的SMTP报错:
# 替换原有环境变量读取代码 EMAIL_ADDRESS = os.environ.get('EMAIL_ADDRESS') EMAIL_PASSWORD = os.environ.get('EMAIL_PASSWORD') # 简单校验变量是否成功读取 if not EMAIL_ADDRESS or not EMAIL_PASSWORD: raise ValueError("未读取到有效的邮箱环境变量,请检查GitHub Secrets注入配置")
配套排查要点
- 确认创建的两个Secrets是仓库级别权限,名称拼写和配置完全一致(区分大小写,不要夹带多余空格)
- 确认Secrets中存储的Gmail密码是账号开启两步验证后生成的应用专用密码,而非邮箱本身的登录密码
- 排查阶段可以临时在run命令中增加校验语句,确认环境变量成功注入(仅判断变量是否存在,不要打印具体值避免泄露凭证):
run: | python -m pip install --upgrade pip pip install -r requirements.txt # 临时排查:仅判断变量存在性 if [ -n "$EMAIL_ADDRESS" ] && [ -n "$EMAIL_PASSWORD" ]; then echo "环境变量注入正常"; else echo "环境变量缺失"; fi python sj-gobierno.py
内容的提问来源于stack exchange,提问作者canovasjm
相关产品推荐
相关产品推荐

