JRebel本地热部署、远程热部署Docker里的SpringBoot应用

Docker版本CentOS 7.6 Docker CE 19.03.9 | IntelliJ IDEA版本 2023.1.3 (Ultimate Edition)

一、JRebel本地热部署

1、安装插件

1.1插件市场搜jrebel,安装即可,无需重启IDEA 1.png

1.2离线安装JRebel and XRebel,适合内网开发的小伙伴

2、激活

因为我有云服务器,所以自己在服务器上搞了个反向代理服务,很简单按照作者lanyu大神分享撸了个反代工具, 可用于激活JRebel的博客里,直接用Docker来安装。(没有云服务器的,要么在本地搭建反向代理服务,要么就借用别人的服务)

docker pull ilanyu/golang-reverseproxy

#记得在服务器防火墙页面中开放7055端口
docker run -d -p 7055:8888 ilanyu/golang-reverseproxy

激活页面(邮箱随便填) 2.png

激活后(不成功重新生成guid再次尝试),会自动配置JRebel的工程,跟随提示即可

查看是否已显示激活,激活后显示 valid,图标为绿色。此时可以点击 Work offline 实现离线的验证,离线下有效期为半年时间,半年后可以重新认证即可。若是 online 则实时会往服务端进行匹配验证。推荐使用 Work offline 方式!

4.png

查看是否配置完整,安装好后,默认会出现JRebel & XRebel的选项 3.png

设置自动编译,由于JRebel是实时监控class文件的变化来实现热部署的,所以在idea环境下需要打开自动变异功能才能实现随时修改,随时生效

5.png

有的教程会让你设置compiler.automake.allow.when.app.running,不知道是因为我的IDEA是最新版本还是什么原因,没找到 6.png 7.png

配置完成后,找到应用启动类,选择Rebel Debug 8.png

此时可以修改或者增加代码,通过 Ctrl + Shift + F9 即可实现重新编译热部署。此时再也不需要每增加一个函数体、类都需要进行重启的操作,大大提升了 SpringBoot 开发调试的效率。

二、JRebel远程热部署

配置远程热部署服务,主要步骤如下:

  • 在服务器安装 JRebel
  • 配置本地 JRebel
  • 在服务器用 JRebel 启动
  • 本地新增远端服务器进行热部署
  • 测试远程热部署是否成功

1.配置服务器 JRebel

1.1由于SpringBoot应用都是部署在Docker里,所以先在宿主机上下载jrebel安装包,到时候启动容器时再挂载到容器里

curl -O http://dl.zeroturnaround.com/jrebel-stable-nosetup.zip

#解压得到 jrebel 文件夹
unzip jrebel-stable-nosetup.zip

9.png

1.2设置密码(进入到 jrebel 目录)(这一步先不着急做,等jrebel文件夹挂载到容器里再做)

java -jar jrebel.jar -set-remote-password <password>

# 例如,设置密码为 123456
java -jar jrebel.jar -set-remote-password 123456

1.3激活服务端(进入到 jrebel/bin 目录,执行脚本) 在激活服务端中,JRebel 也提供了 3 种激活方式: Command line activation examples

在这里我们通过 With license server URL as an argument 方式,具体脚本如下

./activate.sh http://43.142.158.6:7055/bc1fdd38-9be0-4251-a619-e14a4a6c21b9 developer@wedev.tech

10.png

看到successfully activated,就代表已成功激活

2.配置本地 JRebel

2.1激活成功后,配置Dockerfile,复制下面这段命令到Dockerfile的ENTRYPOINT参数里,agentpath填容器里的路径,而不是宿主机的 (参考Dockerfile配置示例)

11.png

Dockerfile配置示例:

FROM java:8
MAINTAINER wecom

VOLUME /tmp

COPY wecom-0.0.1.RELEASE.jar wecom-1.0.0.jar

ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime && echo "{TZ}" > /etc/timezone

EXPOSE 9081
EXPOSE 9000

ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9000","-agentpath:/usr/local/src/jrebel/lib/libjrebel64.so", "-Drebel.remoting_plugin=true","-jar","wecom-1.0.0.jar"]

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9000 配置远程调试,不需要可以删掉。如何远程调试看这里IDEA远程调试云服务器Docker中SpringBoot项目应用

ENTRYPOINT ["java","-agentpath:/usr/local/src/jrebel/lib/libjrebel64.so", "-Drebel.remoting_plugin=true","-jar","wecom-1.0.0.jar"]

小插曲:配置完Dockerfile后,打包生成镜像时报错:Could not acquire image ID or digest following build,找了一圈解决办法发现其实是Dockerfile里格式错误。。。(参考:build failed: Could not acquire image ID or digest following build

12.png

13.png

2.2JRebel Panel 窗口,将需要热部署的项目打包,生成 rebel.xml 和 rebel-remote.xml

19.png

2.3挂载jrebel文件到docker容器里(此时挂载进去的jrebel文件无需激活,因为之前已经激活过了)

启动配置Create Container Cofiguration配置Run options

-v /root/jrebel:/usr/local/src/jrebel

14.png

3.在服务器用 JRebel 启动

启动容器后,容器内的应用启动日志

16.png

进入容器:

docker exec -it {Container ID} bash

可以看到挂载成功了

15.png

2.3设置密码(如果你忘记了密码可以重新执行这条命令,然后重启容器docker restart Container ID

cd usr/local/src/jrebel
java -jar jrebel.jar -set-remote-password 123456

#提示SUCCESS,代表设置成功
SUCCESS: Remote server password set to '123456'

4.本地新增远端服务器进行热部署

17.png

点击 Test Connection,点击 OK 确认

5.此时即可点击右上角 “远程热部署” 按钮后,通过 Ctrl + Shift + F9 即可实现重新编译热远程部署

18.png

测试代码是否部署,访问是否正常

20.png

ps: 可以先远程热部署后,再点击远程调试 Debug,即可实现先热部署再调试,大大加快开发效率。

至此,所有的配置过程都结束了!即可开始尽情享受,JRebel 远程热部署和远程调试~ 实现真正的热部署,无论是改了代码片段还是配置文件,都可以做到不用重新启动就生效!(完)

参考文章:微服务开发神器--JRebel 插件破解和实现本地/远程热部署教程(IntelliJ IDEA版)


已有 0 条评论

    感谢参与互动!