有个 Java 项目,代码里面有个配置文件写死了 nacos 配置中心的地址以及一些其它参数,如何构建镜像才能实现三个不同的环境使用?或者有没有更灵活的办法呢?
比如三个环境的 nacos 地址
Uat 环境 nacos 地址 uat.nacos.com
Stag 环境 nacos 地址 stag.nacos.com
Prod 环境 nacos 地址 prod.nacos.com
![]() | 1 CEBBCAT 2021-07-17 20:04:41 +08:00 - 在初始化时根据环境切换配置内容 - 按照文件加载配置 |
![]() | 2 defunct9 2021-07-17 20:10:11 +08:00 via iPhone 有,启动 pod 的时候侵入修改 |
![]() | 3 creanme 2021-07-17 20:11:21 +08:00 蹭主题,顺便问问前端如何打包一次,能在两个环境中使用。代码中有调用其它系统接口,测试环境和生产环境接口不同。之前要么在本地或者 pipeline 中打包两次,分别对应测试环境和生产环境,或者在代码里面根据当前域名来判断是否是生产环境,不过都不太好的样子。 |
![]() | 4 Acoffice 2021-07-17 20:17:24 +08:00 via Android 通过不同变量来加载不同地址。 |
![]() | 5 ruiyi1994 2021-07-17 20:22:49 +08:00 通过环境变量的改变来加载配置, 比如设置一个 RUN_ENV=production | stage | testing | dev |
![]() | 6 ik 2021-07-17 20:32:08 +08:00 via iPhone 写成同样的地址呢, 不同环境配置不同解析? |
![]() | 7 xuanbg 2021-07-17 21:12:04 +08:00 ![]() JAVA_OPTIOnS="-Dspring.profiles.active=prod" JAVA_OPTIOnS="-Dspring.profiles.active=stag" |
8 clickhouse 2021-07-17 21:34:55 +08:00 常见的就是楼上,指定 spring 的 profiles,配置都放在 jar 包里面。要不然就是启动 jar 的时候,动态传入需要的地址。 |
9 Jooooooooo 2021-07-17 21:51:23 +08:00 启动的时候有个 pre 脚本 判定当前环境, 然后对应的替换配置文件中的内容 |
10 zhzy0077 2021-07-17 22:18:15 +08:00 所有环境相关的配置,比如数据库连接,配置中心啥的,都应该是容器 /代码无关的,一般是通过环境变量拿进去。 12 factor app 可以看看: III. Config Store config in the environment |
![]() | 11 BBCCBB 2021-07-17 22:25:01 +08:00 通过启动变量.. 或者代码里写好, 根据启动参数里不同的 env 来使用不同的地址.. |
![]() | 12 thet 2021-07-17 23:10:11 +08:00 代码里面通过环境变量取值,镜像构建就不用管这些了,启动镜像的时候注入环境变量 |
![]() | 13 winglight2016 2021-07-18 12:16:32 +08:00 镜像是在说 docker image 吗?不是支持 env 配置吗?这个跟 image 无关,在 run 的时候加-env 就行了 |
14 lff0305 2021-07-18 13:12:20 +08:00 via Android docker/kubernetes 都可以在部署的时候指定一个 file 覆盖镜像中的的 file,docker 通过-v , kubernetes 通过 configmap/volume |
![]() | 15 tyit OP @xuanbg 这个可以,也就是 resource 下面,放三个文件,比如 uat stag prod,构建镜像,然后 deployment 启动的时候,加一个 Java_opts 这样传过去 docker 启动命令。应该可以实现了。 |
![]() | 16 tyit OP @lff0305 这个动作是构建的时候动作,构建完了就是一个完整的 jar 包,怎么用 file 覆盖? |
![]() | 18 zzl22100048 2021-07-19 10:02:00 +08:00 不知道用的是不是 SpringBoot,SpringBoot application 配置支持环境变量 Java 打包镜像用 jib 比较适合, |
![]() | 19 tms 2021-07-21 17:17:27 +08:00 靠运行时的环境变量来区分 |