You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 16:15:55