如何打包一个镜像三个环境都可以使用?

2021-07-17 18:26:35 +08:00
 tyit

有个 Java 项目,代码里面有个配置文件写死了 nacos 配置中心的地址以及一些其它参数,如何构建镜像才能实现三个不同的环境使用?或者有没有更灵活的办法呢?

比如三个环境的 nacos 地址

Uat 环境 nacos 地址 uat.nacos.com

Stag 环境 nacos 地址 stag.nacos.com

Prod 环境 nacos 地址 prod.nacos.com

3391 次点击
所在节点    DevOps
19 条回复
CEBBCAT
2021-07-17 20:04:41 +08:00
- 在初始化时根据环境切换配置内容
- 按照文件加载配置
defunct9
2021-07-17 20:10:11 +08:00
有,启动 pod 的时候侵入修改
creanme
2021-07-17 20:11:21 +08:00
蹭主题,顺便问问前端如何打包一次,能在两个环境中使用。代码中有调用其它系统接口,测试环境和生产环境接口不同。之前要么在本地或者 pipeline 中打包两次,分别对应测试环境和生产环境,或者在代码里面根据当前域名来判断是否是生产环境,不过都不太好的样子。
Acoffice
2021-07-17 20:17:24 +08:00
通过不同变量来加载不同地址。
ruiyi1994
2021-07-17 20:22:49 +08:00
通过环境变量的改变来加载配置, 比如设置一个 RUN_ENV=production | stage | testing | dev
ik
2021-07-17 20:32:08 +08:00
写成同样的地址呢, 不同环境配置不同解析?
xuanbg
2021-07-17 21:12:04 +08:00
JAVA_OPTIONS="-Dspring.profiles.active=prod"
JAVA_OPTIONS="-Dspring.profiles.active=stag"
clickhouse
2021-07-17 21:34:55 +08:00
常见的就是楼上,指定 spring 的 profiles,配置都放在 jar 包里面。要不然就是启动 jar 的时候,动态传入需要的地址。
Jooooooooo
2021-07-17 21:51:23 +08:00
启动的时候有个 pre 脚本

判定当前环境, 然后对应的替换配置文件中的内容
zhzy0077
2021-07-17 22:18:15 +08:00
所有环境相关的配置,比如数据库连接,配置中心啥的,都应该是容器 /代码无关的,一般是通过环境变量拿进去。
12 factor app 可以看看: III. Config
Store config in the environment
BBCCBB
2021-07-17 22:25:01 +08:00
通过启动变量.. 或者代码里写好, 根据启动参数里不同的 env 来使用不同的地址..
thet
2021-07-17 23:10:11 +08:00
代码里面通过环境变量取值,镜像构建就不用管这些了,启动镜像的时候注入环境变量
winglight2016
2021-07-18 12:16:32 +08:00
镜像是在说 docker image 吗?不是支持 env 配置吗?这个跟 image 无关,在 run 的时候加-env 就行了
lff0305
2021-07-18 13:12:20 +08:00
docker/kubernetes 都可以在部署的时候指定一个 file 覆盖镜像中的的 file,docker 通过-v , kubernetes 通过 configmap/volume
tyit
2021-07-18 16:14:43 +08:00
@xuanbg 这个可以,也就是 resource 下面,放三个文件,比如 uat stag prod,构建镜像,然后 deployment 启动的时候,加一个 Java_opts 这样传过去 docker 启动命令。应该可以实现了。
tyit
2021-07-18 16:15:33 +08:00
@lff0305 这个动作是构建的时候动作,构建完了就是一个完整的 jar 包,怎么用 file 覆盖?
tyit
2021-07-18 16:16:22 +08:00
@thet 嗯嗯,思路是这样。
zzl22100048
2021-07-19 10:02:00 +08:00
不知道用的是不是 SpringBoot,SpringBoot application 配置支持环境变量
Java 打包镜像用 jib 比较适合,
tms
2021-07-21 17:17:27 +08:00
靠运行时的环境变量来区分

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/790104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX