GitHub Actions Secrets无法注入Python环境变量问题求助
问题
在GitHub Actions中执行Python脚本时无法读取Secrets值,使用os.environ.get("SECRET_NAME")仅返回None,导致MongoDB连接报错(提示无效主机名none)。但Workflow中的「Testing Secrets」步骤可以正常输出Secrets值,已确认仓库Secrets定义正确。
相关代码与配置
Python脚本(update_data.py)片段
from pymongo import MongoClient import os try: user = os.environ.get("MONGO_USER") password = os.environ.get("MONGO_PASSWORD") host = os.environ.get("MONGO_HOST") dbname = os.environ.get("MONGO_DBNAME") collection_name = os.environ.get("MONGO_COLLECTION_NAME") app_name = os.environ.get("MONGO_APP_NAME") uri = f"mongodb+srv://{user}:{password}@{host}/{dbname}?retryWrites=true&w=majority&appName={app_name}&tls=true" print(uri) client = MongoClient(uri) client.admin.command('ping') print("Pinged your deployment. You successfully connected to MongoDB!") symboles = ["MC.PA", "RMS.PA", "OR.PA", "CDI.PA", "TTE.PA", "AIR.PA", "SU.PA", "SAN.PA", "AI.PA", "EL.PA", "SAF.PA", "CS.PA", "DG.PA", "BNP.PA", "DSY.PA", "KER.PA", "BN.PA"] except Exception as e: print(e)
Workflow配置(main.yml)
on: workflow_dispatch: # 允许手动触发 schedule: - cron: '0 9 * * *' # 每天UTC时间9点执行 build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.x' - name: Update SSL Certificates run: sudo apt-get update && sudo apt-get install -y ca-certificates - name: Update certifi run: pip install --upgrade certifi - name: Install dependencies run: | pip install pymongo pip install yfinance # 在此添加其他依赖 - name: Testing Secrets run: | echo "$MONGO_USER" echo "$MONGO_PASSWORD" echo "$MONGO_HOST" echo "$MONGO_DBNAME" echo "$MONGO_COLLECTION_NAME" echo "$MONGO_APP_NAME" env: MONGO_USER: ${{ secrets.MONGO_USER }} MONGO_PASSWORD: ${{ secrets.MONGO_PASSWORD }} MONGO_HOST: ${{ secrets.MONGO_HOST }} MONGO_DBNAME: ${{ secrets.MONGO_DBNAME }} MONGO_COLLECTION_NAME: ${{ secrets.MONGO_COLLECTION_NAME }} MONGO_APP_NAME: ${{ secrets.MONGO_APP_NAME }} - name: Execute update_data.py run: python API/update_data.py
测试代码(data.py)
import os print("MONGO_USER:", os.environ.get("MONGO_USER"))
报错信息
Traceback (most recent call last): File "/home/runner/work/bourses/bourses/API/update_data.py", line 19, in <module> client = MongoClient(uri) MONGO_USER: None ^^^^^^^^^^^^^^^^ File "/opt/hostedtoolcache/Python/3.11.8/x64/lib/python3.11/site-packages/pymongo/mongo_client.py", line 771, in __init__ res = uri_parser.parse_uri( ^^^^^^^^^^^^^^^^^^^^^ File "/opt/hostedtoolcache/Python/3.11.8/x64/lib/python3.11/site-packages/pymongo/uri_parser.py", line 557, in parse_uri dns_resolver = _SrvResolver(fqdn, connect_timeout, srv_service_name, srv_max_hosts) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/hostedtoolcache/Python/3.11.8/x64/lib/python3.11/site-packages/pymongo/srv_resolver.py", line 81, in __init__ raise ConfigurationError(_INVALID_HOST_MSG % (fqdn,)) pymongo.errors.ConfigurationError: Invalid URI host: none is not a valid hostname for 'mongodb+srv://'. Did you mean to use 'mongodb://'? Error: Process completed with exit code 1.
解决方案
问题根源是环境变量仅在「Testing Secrets」步骤中定义,执行Python脚本的步骤未继承或传递这些环境变量。GitHub Actions中,env字段是步骤级别的,仅对当前步骤生效,不会自动传递到后续步骤。
方法1:给「Execute update_data.py」步骤添加env配置
修改Workflow中执行脚本的步骤,添加env字段传递Secrets:
- name: Execute update_data.py run: python API/update_data.py env: MONGO_USER: ${{ secrets.MONGO_USER }} MONGO_PASSWORD: ${{ secrets.MONGO_PASSWORD }} MONGO_HOST: ${{ secrets.MONGO_HOST }} MONGO_DBNAME: ${{ secrets.MONGO_DBNAME }} MONGO_COLLECTION_NAME: ${{ secrets.MONGO_COLLECTION_NAME }} MONGO_APP_NAME: ${{ secrets.MONGO_APP_NAME }}
方法2:将env定义在Job级别(推荐)
如果多个步骤都需要使用这些环境变量,可以把env移到build Job下,让所有步骤共享:
on: workflow_dispatch: # 允许手动触发 schedule: - cron: '0 9 * * *' # 每天UTC时间9点执行 build: runs-on: ubuntu-latest env: MONGO_USER: ${{ secrets.MONGO_USER }} MONGO_PASSWORD: ${{ secrets.MONGO_PASSWORD }} MONGO_HOST: ${{ secrets.MONGO_HOST }} MONGO_DBNAME: ${{ secrets.MONGO_DBNAME }} MONGO_COLLECTION_NAME: ${{ secrets.MONGO_COLLECTION_NAME }} MONGO_APP_NAME: ${{ secrets.MONGO_APP_NAME }} steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.x' # 后续步骤无需重复定义env,直接使用即可 - name: Update SSL Certificates run: sudo apt-get update && sudo apt-get install -y ca-certificates - name: Update certifi run: pip install --upgrade certifi - name: Install dependencies run: | pip install pymongo pip install yfinance # 在此添加其他依赖 - name: Testing Secrets run: | echo "$MONGO_USER" echo "$MONGO_PASSWORD" echo "$MONGO_HOST" echo "$MONGO_DBNAME" echo "$MONGO_COLLECTION_NAME" echo "$MONGO_APP_NAME" - name: Execute update_data.py run: python API/update_data.py
验证方法
执行修改后的Workflow,Python脚本中的os.environ.get()就能正确读取到Secrets值,MongoDB连接也会正常建立。
内容的提问来源于stack exchange,提问作者Arekushisu
相关产品推荐
相关产品推荐

