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

使用envsubst+Bitbucket Pipelines部署Meteor应用遇JSON解析错误

解决Bitbucket Pipeline部署Meteor应用时Mup读取config.json的JSON格式错误问题

问题场景

通过Bitbucket Pipeline使用Mup部署Meteor应用,尝试将Bitbucket安全变量$STAGING_MONGO_URL注入到secure_mongo.json生成config.json,但执行mup deploy时出现JSON语法错误:

Error loading config file:
SyntaxError: /opt/atlassian/pipelines/agent/build/.bot-staging-ci-cd/config.json: Unexpected token m in JSON at position 13

此前尝试直接对Mup的JS配置文件使用envsubst,变量未被替换,Mup执行时直接报错。

相关文件内容:

  • secure_mongo.json原内容:
{
    "secret": $STAGING_MONGO_URL
}
  • Mup配置文件读取逻辑:
var mongo = require('./config.json');

module.exports = {
  MONGO_URL: mongo.secret,
}
  • Bitbucket Pipeline核心脚本片段:
cat secure_mongo.json | envsubst > config.json
cat config.json && realpath config.json
npm install -g mup
mup deploy

错误原因

  1. JSON格式非法:secure_mongo.json中$STAGING_MONGO_URL未被双引号包裹,envsubst替换后生成的config.json里,Mongo URL作为字符串没有引号,违反JSON语法规范,导致Node.js的require无法解析。
  2. 直接替换JS文件失败:默认情况下envsubst会替换所有$VAR格式的变量,但如果JS配置文件中变量写法未被正确识别,或存在其他$开头的内容干扰,会导致替换失效。

解决方案

方案1:修复JSON模板格式

修改secure_mongo.json,给变量添加双引号,确保生成的JSON合法:

{
    "secret": "$STAGING_MONGO_URL"
}

Pipeline中的envsubst命令无需修改,替换后生成的config.json中Mongo URL会被双引号包裹,Node.js可正常解析。

方案2:直接生成Mup的JS配置文件

跳过JSON文件生成步骤,直接对Mup配置文件的模板进行变量替换:

  1. 创建Mup配置模板文件mup.config.tpl.js:
module.exports = {
  MONGO_URL: "$STAGING_MONGO_URL",
}
  1. 在Pipeline脚本中替换变量生成最终配置文件:
# 仅替换指定变量,避免误替换其他$开头的内容
cat mup.config.tpl.js | envsubst '$STAGING_MONGO_URL' > mup.config.js
# 若Mup默认读取mup.js,可重命名或执行时指定配置文件
# mup deploy --config mup.config.js

这种方式无需额外JSON文件,直接生成合法的JS配置,避免JSON格式问题。

验证步骤

在Pipeline脚本中保留cat生成文件的命令,确认变量已被正确替换且文件格式合法,再执行mup deploy。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:15:41