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先来一遍。

培枫

Read more posts by this author.

Subscribe to The Terminus Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!