首页 » Jenkins 自动部署 Spring Boot 应用

Jenkins 自动部署 Spring Boot 应用

安装 Jenkins

以 CentOS 为例,首先安装 JDK

yum install java-11-openjdk-devel

然后安装 Jenkins

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install epel-release
yum install jenkins
systemctl daemon-reload

启动 Jenkins 服务

systemctl start jenkins
systemctl enable jenkins

如果服务器开启了防火墙,则配置如下例外规则(端口号改成你自己的)

YOURPORT=8080
PERM="--permanent"
SERV="$PERM --service=jenkins"

firewall-cmd $PERM --new-service=jenkins
firewall-cmd $SERV --set-short="Jenkins ports"
firewall-cmd $SERV --set-description="Jenkins port exceptions"
firewall-cmd $SERV --add-port=$YOURPORT/tcp
firewall-cmd $PERM --add-service=jenkins
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload

这样你的 Jenkins 服务就可以访问了,假设访问地址为 http://yourjenkins.com:8080 ,首次进入后需要进行解锁安装插件创建管理员等初始化操作,之后就可以用管理员账号登录到 Jenkins Dashboard 了。

创建 Jenkins Pipeline

Dashboard 中点击 New Item ,输入名称,选择 Freestyle project ,点击 OK 进入下一步进行配置。下面介绍其中需要注意的几项配置。

Source Code Management

以放在 Github 的项目为例,为了能在 Jenkins 中拉取代码,首先需要在 Github 中创建 personal access token ,然后将 https://<personal access token>@github.com/<username>/<repository>.git 作为 Repository URL 填入。

Build Triggers

勾选 GitHub hook trigger for GITScm polling ,然后在 Github 项目下创建 Webhook : Settings > Webhooks > Add webhook ,在 Payload URL 中填入 http://yourjenkins.com:8080/github-webhook/ ,在 Content type 中选择 application/jsonSecret 不填,最后点击 Add webhook 提交。

Build

第一步:构建

由于要构建的是使用 Gradle 的 Spring Boot 项目,我们在这里选择 Add build step > Invoke Gradle script ,在 Tasks 中填入 bootJar

第二步:部署

我们需要使用 shell 命令将构建产物移动到目标目录(这里以 /var/lib/myapp 为例),并且授予其执行权限,因此选择 Add build step > Execute shell ,在 Command 中填入:

mv build/libs/*.jar /var/lib/myapp/myapp.jar
chmod o+x /var/lib/myapp/myapp.jar

最后点击 Save 保存即可。

将 Spring Boot 应用安装为 Linux 系统服务

要安装为系统服务,首先我们需要确保构建的是 fully executable jar ,需要在项目 Gradle 配置中添加:

bootJar {
    launchScript()
}

然后在 /etc/systemd/system 目录下创建 myapp.service 文件,文件内容示例如下:

[Unit]
Description=myapp
After=syslog.target

[Service]
User=myapp
ExecStart=/var/lib/myapp/myapp.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

提醒

根据你的应用修改 Description, User, ExecStart 的值。

最后启动该服务

systemctl start myapp.service
systemctl enable myapp.service

重新部署后自动重启服务

我们使用 systemd path units 来监控部署目标目录,在 /etc/systemd/system 目录下创建 myapp-watcher.path 文件:

[Path]
PathChanged=/var/lib/myapp/myapp.jar

[Install]
WantedBy=multi-user.target

然后使用另一个 systemd service 来重新启动之前创建的 myapp.service , 在 /etc/systemd/system 目录下创建 myapp-watcher.service 文件:

[Unit]
Description=myapp restarter
After=syslog.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart myapp.service

[Install]
WantedBy=multi-user.target

最后我们启动 myapp-watcher.path

systemctl start myapp-watcher.path
systemctl enable myapp-watcher.path

这样当 /var/lib/myapp/myapp.jar 文件改变的时候,就会启动 myapp-watcher 服务,从而执行重启 myapp.service 的命令。

订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论