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

MongoDB+Streamlit集成:GitHub Actions密钥读取问题求助

解决Streamlit+GitHub Actions读取MongoDB密钥失败的问题

先确认基础配置

首先确保你已经在仓库的 Settings -> Secrets and variables -> Actions 里正确添加了MONGO_USERNAME和MONGO_PASSWORD两个密钥,名称无拼写错误、无空格。


方案一:通过Workflow环境变量传递(最推荐)

1. Workflow YAML配置

在你的GitHub Actions workflow文件中,将密钥注入到运行Streamlit的环境变量中:

jobs:
  run-streamlit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 配置Python环境
        uses: actions/setup-python@v5
        with:
          python-version: '3.11' # 匹配你的项目Python版本
      - name: 安装依赖
        run: |
          python -m pip install --upgrade pip
          pip install streamlit pymongo
      - name: 启动Streamlit应用
        env:
          MONGO_USERNAME: ${{ secrets.MONGO_USERNAME }}
          MONGO_PASSWORD: ${{ secrets.MONGO_PASSWORD }}
        run: streamlit run your_app.py # 替换为你的主文件名称

2. Streamlit代码读取变量

在Python文件中通过os.environ读取环境变量,同时增加校验避免空值:

import os
import pymongo
from urllib.parse import quote_plus

# 读取环境变量
mongo_username = os.environ.get("MONGO_USERNAME")
mongo_password = os.environ.get("MONGO_PASSWORD")

# 校验变量是否存在
if not mongo_username or not mongo_password:
    raise ValueError("未获取到MongoDB密钥,请检查环境变量配置")

# 转义特殊字符(如果密码含@、:等符号必须处理)
encoded_user = quote_plus(mongo_username)
encoded_pwd = quote_plus(mongo_password)

# 建立MongoDB连接
client = pymongo.MongoClient(
    f"mongodb+srv://{encoded_user}:{encoded_pwd}@你的集群地址.mongodb.net/"
)

方案二:通过命令行参数传递

如果环境变量方式仍有问题,可尝试命令行参数传递:

1. Workflow YAML配置

注意Streamlit需要用--分隔自身参数和自定义参数:

- name: 启动Streamlit应用
  run: streamlit run your_app.py -- --mongo-username ${{ secrets.MONGO_USERNAME }} --mongo-password ${{ secrets.MONGO_PASSWORD }}

2. Streamlit代码读取参数

用argparse解析命令行参数:

import argparse
import pymongo
from urllib.parse import quote_plus

parser = argparse.ArgumentParser()
parser.add_argument("--mongo-username", required=True)
parser.add_argument("--mongo-password", required=True)
args = parser.parse_args()

# 转义特殊字符
encoded_user = quote_plus(args.mongo_username)
encoded_pwd = quote_plus(args.mongo_password)

client = pymongo.MongoClient(
    f"mongodb+srv://{encoded_user}:{encoded_pwd}@你的集群地址.mongodb.net/"
)

排查调试技巧

如果还是无法读取,可临时在Workflow中添加调试步骤,确认变量是否正确传递:

- name: 调试环境变量
  run: |
    echo "MONGO_USERNAME: $MONGO_USERNAME"
    echo "MONGO_PASSWORD: $MONGO_PASSWORD"

调试完成后务必删除该步骤,避免密钥泄露。

内容的提问来源于stack exchange,提问作者shyam_gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:03:16