有个 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 1
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
靠运行时的环境变量来区分
|