问题描述
agentarts dev 命令支持 --env KEY=VALUE 来注入运行时环境变量,可以在不修改 .agentarts_config.yaml 的情况下传递 API key 等敏感信息。但 agentarts launch(cloud deploy)没有这个能力。
当前行为
agentarts launch 只从 .agentarts_config.yaml 的 environment_variables 段读取环境变量值:
# .agentarts_config.yaml(必须提交到 git)
environment_variables:
- key: DEEPSEEK_API_KEY
value: sk-xxxxxxxxxxxxxxxxxxxxxx # ← API key 硬编码在文件中
- key: MODEL_API_KEY
value: sk-xxxxxxxxxxxxxxxxxxxxxx # ← 硬编码,会被提交
后果:如果用户需要 cloud deploy,就必须把真实的 API key 写在 .agentarts_config.yaml 文件中。而这个文件包含部署基础设施配置(region、SWR、runtime、tags 等),必须提交到 git。这导致 API key 必然泄漏到版本控制中。
已有经验
agentarts dev 已经解决了这个问题:
agentarts dev --env DEEPSEEK_API_KEY=sk-xxx --env MODEL_API_KEY=sk-xxx
用户可以在命令行或 CI/CD pipeline 中注入敏感值,无需触碰配置文件。这是正确的设计,但 launch 没有继承。
期望行为
agentarts launch 应支持以下能力(按优先级排列):
P0: 环境变量 ${VAR} 替换
在 YAML 解析后,对 environment_variables.value 进行 ${VAR_NAME} 替换(从 os.environ 取值):
# .agentarts_config.yaml(安全提交到 git,无密钥)
environment_variables:
- key: DEEPSEEK_API_KEY
value: ${DEEPSEEK_API_KEY}
- key: MODEL_API_KEY
value: ${MODEL_API_KEY}
部署时:
export DEEPSEEK_API_KEY=sk-xxx
export MODEL_API_KEY=sk-xxx
agentarts launch # CLI 自动将 ${DEEPSEEK_API_KEY} 解析为实际值
这是对用户体验影响最小、实施成本最低的方案。与 Docker Compose 的 variable_substitution 机制完全一致,开发者无需学习新概念。
P1: --env-file 标志
agentarts launch --env-file .env.deploy
P1: --env KEY=VALUE 标志(与 dev 一致)
agentarts launch --env DEEPSEEK_API_KEY=sk-xxx --env MODEL_API_KEY=sk-xxx
优先级规则
--env > 系统环境变量 > --env-file > ${VAR:-default} 默认值
附加要求
- 解析后的值不应写回
.agentarts_config.yaml 文件
- 日志输出中应对密钥值进行脱敏(如
DEEPSEEK_API_KEY=****)
- 未解析的必需环境变量应硬失败(不应以字面量
${VAR} 部署)
为什么重要
- 安全:API key 等敏感信息不应写入版本控制(OWASP、12-Factor App 基础要求)
- 一致性:
dev 已有 --env,launch 缺少是功能不对称
- 行业标准:Docker Compose、Kubernetes Helm、Terraform 等所有主流部署工具都支持
${VAR} 替换
- GitOps 兼容:允许
.agentarts_config.yaml 作为纯声明式部署清单安全地通过 git 管理
参考资料
问题描述
agentarts dev命令支持--env KEY=VALUE来注入运行时环境变量,可以在不修改.agentarts_config.yaml的情况下传递 API key 等敏感信息。但agentarts launch(cloud deploy)没有这个能力。当前行为
agentarts launch只从.agentarts_config.yaml的environment_variables段读取环境变量值:后果:如果用户需要 cloud deploy,就必须把真实的 API key 写在
.agentarts_config.yaml文件中。而这个文件包含部署基础设施配置(region、SWR、runtime、tags 等),必须提交到 git。这导致 API key 必然泄漏到版本控制中。已有经验
agentarts dev已经解决了这个问题:用户可以在命令行或 CI/CD pipeline 中注入敏感值,无需触碰配置文件。这是正确的设计,但
launch没有继承。期望行为
agentarts launch应支持以下能力(按优先级排列):P0: 环境变量
${VAR}替换在 YAML 解析后,对
environment_variables.value进行${VAR_NAME}替换(从os.environ取值):部署时:
这是对用户体验影响最小、实施成本最低的方案。与 Docker Compose 的
variable_substitution机制完全一致,开发者无需学习新概念。P1:
--env-file标志P1:
--env KEY=VALUE标志(与dev一致)优先级规则
附加要求
.agentarts_config.yaml文件DEEPSEEK_API_KEY=****)${VAR}部署)为什么重要
dev已有--env,launch缺少是功能不对称${VAR}替换.agentarts_config.yaml作为纯声明式部署清单安全地通过 git 管理参考资料