java 项目使用 dice 部署自检
与我司开发同学接触颇多,在使用 dice 的过程中, 偶尔会因种种原因, 导致最终部署失败。但仔细排查后发现,有些问题实在是可通过本地自检从而避免掉,从而节约开发时间。因时常遇到,故有此篇。
三省代码
子还是曾子曾经曰过:吾日三省吾身。 我们在使用 dice 构建之前,也请务必三省,以减少不必要的失败:
- 我所有的依赖都已经给到 dice 了么
- 我告诉 dice 用什么配置文件了么
- 我本地可以通过 java -jar 运行成功么
依赖推送
dice 构建 java 相关项目时, 通过 nexus 获取 java 依赖。
现阶段, dice 下各个集群的 nexus, 都会代理到 terminus nexus。所以,我们只需要将项目依赖到的三方包推送到 terminus nexus 即可。
通过 idea 自带 deploy 命令或者下面命令即可。
mvn deploy:deploy-file -DgroupId=io.terminus.console -DartifactId=horus-common -Dversion=horus-common-1.0-SNAPSHOT -Dpackaging=jar -Dfile=/Users/yuhaiping/.m2/repository/io/terminus/horus/console/horus-common/1.0-SNAPSHOT/horus-common-1.0-SNAPSHOT.jar -Durl=http://repo.terminus.io/content/repositories/snapshots/ -DrepositoryId=terminus
打包失败的时候,如果发现某个 jar 包拉不下来,请考虑我
选用配置文件
Dice 共分为四个环境, 如图:
springboot 项目, 一般而言,可以通过指定 application-xxx.yml 来配置不同环境的配置文件。通过 -Dspring.profiles.active
来指定。
在 dice 中, 可以通过配置 SPRING_PROFILES_ACTIVE
环境变量来实现
打包成功却部署失败,检查服务日志,却意外发现,咦,怎么用的是application-default.yml
,而不是application-docker.yml
呢? 那么恭喜,你找到问题所在了:那就是你没有配置 SPRING_PROFILES_ACTIVE
或者该环境变量配置的有问题了。
本地启动
部署不如意事十之八九,又一次部署失败了!我本地通过 IDEA 启动是 OK 的啊!!!
然后你可能遇到了这样的报错:no main manifest attribute
一般而言, 是 pom 中缺少 spring-boot-maven-plugin
的配置(子 pom 配置)
那这样的部署错误要如何避免呢?
dice 构建 java 项目,通过 bp 将其制作成 image, CMD 为 /entrypoint.sh
。
- 如果可以上宿主机,通过
docker inspect image_id
查看 CMD 信息,然后使用docker exec -ti image_id bash
进入容器内部查看 entrypoint.sh 信息。 - 或者直接通过 dice 进入一个 service 的控制台,查看
/entrypoint.sh
信息
是的,你没看错,就是通过 java -jar
来启动的!所以,为了提高部署成功率,请在本地使用 java -jar
先来一遍。