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

如何为Bluemix(Cloud Foundry) Manifest配置变量区分UAT环境实例

我之前帮团队解决过几乎一模一样的IBM Cloud(原Bluemix)部署环境区分问题,不用每次手动改Manifest文件,有两种靠谱的方案能帮你实现动态配置应用名称和其他设置,下面详细说:

方案1:使用Manifest占位符+部署变量替换

这种方式适合大部分场景,只需要在主Manifest里用占位符,部署时通过命令行或环境变量传入对应的值即可。

步骤1:修改Manifest.yml,替换固定名称为占位符

把原来固定的name和host改成变量占位符(比如${APP_NAME}),其他配置保持不变:

applications:
- path: .
  memory: 256M
  instances: 3
  domain: bm.devfg.com
  buildpack: sdk-for-nodejs
  name: ${APP_NAME}
  host: ${APP_HOST}
  disk_quota: 1024M
  services:
  - dynatracesaasnodejs
  - postgresunixdb
  env:
    NODE_TLS_REJECT_UNAUTHORIZED: "0"

步骤2:部署时传递变量

你可以直接通过cf push命令的-v参数传递变量,或者用环境变量提前设置:

直接命令行部署UAT:

cf push -f manifest.yml -v APP_NAME=AppName_UAT APP_HOST=AppName_UAT

部署DEV实例:

cf push -f manifest.yml -v APP_NAME=AppName_DEV APP_HOST=AppName_DEV

部署PROD环境:

cf push -f manifest.yml -v APP_NAME=AppName APP_HOST=AppName

进阶:写个部署脚本简化操作

为了避免团队成员记复杂命令,写个简单的Shell脚本(比如deploy.sh):

#!/bin/bash
# 检查参数是否合法
if [ $# -ne 1 ]; then
  echo "Usage: ./deploy.sh [uat|dev|prod]"
  exit 1
fi

# 根据参数设置对应变量
case "$1" in
  uat)
    export APP_NAME=AppName_UAT
    export APP_HOST=AppName_UAT
    ;;
  dev)
    export APP_NAME=AppName_DEV
    export APP_HOST=AppName_DEV
    ;;
  prod)
    export APP_NAME=AppName
    export APP_HOST=AppName
    ;;
  *)
    echo "Invalid environment! Use uat, dev, or prod."
    exit 1
esac

# 执行部署
cf push -f manifest.yml

使用时只需要运行:

# 部署UAT
./deploy.sh uat

# 部署DEV
./deploy.sh dev

# 部署PROD
./deploy.sh prod
方案2:多Manifest文件+部署脚本切换

如果不同环境的配置差异很大(比如内存、实例数、绑定的服务都不一样),这种方式更清晰——为每个环境单独写一个Manifest文件,用脚本选择部署。

步骤1:创建多环境Manifest文件

  • manifest-prod.yml(生产环境):
applications:
- path: .
  memory: 256M
  instances: 3
  domain: bm.devfg.com
  buildpack: sdk-for-nodejs
  name: AppName
  host: AppName
  disk_quota: 1024M
  services:
  - dynatracesaasnodejs
  - postgresunixdb
  env:
    NODE_TLS_REJECT_UNAUTHORIZED: "0"
  • manifest-dev.yml(DEV实例):
applications:
- path: .
  memory: 256M
  instances: 3
  domain: bm.devfg.com
  buildpack: sdk-for-nodejs
  name: AppName_DEV
  host: AppName_DEV
  disk_quota: 1024M
  services:
  - dynatracesaasnodejs
  - postgresunixdb
  env:
    NODE_TLS_REJECT_UNAUTHORIZED: "0"
  • manifest-uat.yml(UAT实例):
applications:
- path: .
  memory: 256M
  instances: 3
  domain: bm.devfg.com
  buildpack: sdk-for-nodejs
  name: AppName_UAT
  host: AppName_UAT
  disk_quota: 1024M
  services:
  - dynatracesaasnodejs
  - postgresunixdb
  env:
    NODE_TLS_REJECT_UNAUTHORIZED: "0"

步骤2:写部署脚本切换Manifest

创建deploy.sh脚本:

#!/bin/bash
if [ $# -ne 1 ]; then
  echo "Usage: ./deploy.sh [uat|dev|prod]"
  exit 1
fi

case "$1" in
  uat)
    MANIFEST="manifest-uat.yml"
    ;;
  dev)
    MANIFEST="manifest-dev.yml"
    ;;
  prod)
    MANIFEST="manifest-prod.yml"
    ;;
  *)
    echo "Invalid environment! Use uat, dev, or prod."
    exit 1
esac

cf push -f $MANIFEST

使用方式和方案1一样,运行./deploy.sh uat就能部署UAT环境了。

注意事项

  • 确保团队成员的CF CLI版本支持变量替换(v6及以上版本都没问题,现在v7也完全兼容)
  • 如果用脚本,记得给脚本加执行权限:chmod +x deploy.sh
  • 两种方案都可以扩展到其他配置项,比如不同环境的内存大小、实例数,只需要对应修改占位符或单独的Manifest即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:51:37