Jenkins中自动化部署Spring Boot项目的全过程
准备工作
本文将介绍如何使用 Jenkins 从仓库中拉取项目,经过打包、构建镜像、运行容器等步骤,最终将 Spring Boot 项目部署到服务器上供用户访问。并且当项目有更新时,自动触发 Jenkins 任务,实现自动化部署。
在开始之前,需要先创建一个 Spring Boot 项目,提供一些测试的接口。在确保项目正常运行的情况下,将项目推送到 Git 远程仓库。
Spring Boot 项目文件目录结构:
Dockerfile 文件内容:
FROM bellsoft/liberica-openjdk-debian:17.0.11-cds LABEL maintainer="hayden" RUN mkdir -p /demo/server/logs \ /demo/server/temp WORKDIR /demo/server ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="-Xms512m -Xmx512m" EXPOSE ${SERVER_PORT} ADD ./target/demo.jar ./app.jar ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \ -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \ -jar app.jar
启动 Jenkins
使用 docker-compose 构建 Jenkins 容器。
文件树结构:
. ├── docker-compose.yml └── jenkins ├── jenkins_config └── jenkins_home
docker-compose.yml 文件内容:
version : '3.0.01' services: jenkins: container_name: jenkins image: jenkins/jenkins:lts-jdk17 restart: unless-stopped ports: - "10000:8080" volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录 (下面映射可在容器中执行宿主机docker命令) - "/usr/bin/docker:/usr/bin/docker" - "/var/run/docker.sock:/var/run/docker.sock" - "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7" # - "/usr/local/bin/docker-compose:/usr/local/bin/docker-compose" # 无效 - "./jenkins/jenkins_home:/var/jenkins_home" # ThinBackup插件备份jenkins配置存储目录 - "./jenkins/jenkins_config:/var/jenkins_config" # 解决jenkins安装插件报错: An error occurred during installation: No such plugin: cloudbees-folder # 下载地址 http://ftp.icm.edu.pl/packages/jenkins/plugins/cloudbees-folder/ # - "./jenkins/jenkins_home/war/META-INF/detached-plugins/cloudbees-folder.hpi:/var/jenkins_home/war/META-INF/detached-plugins/cloudbees-folder.hpi" environment: TZ: Asia/Shanghai LANG: en_US.UTF-8 JAVA_OPTS: -Xmx512M -Xms512M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MaxNewSize=128m -Djava.util.logging.config.file=/var/jenkins_home/log.properties -Duser.timezone=Asia/Shanghai user: root # 使用root权限运行容器(docker中通过`-u root`命令)
启动 Jenkins 容器:
docker-compose up -d jenkins
开放 10000 端口,允许外部访问:
firewall-cmd --zone=public --add-port=10000/tcp --permanent firewall-cmd --reload
配置 Jenkins
在浏览器中输入 http://[ip]:10000
访问 Jenkins。经过一系列设置,完成 Jenkins 的初始化。
在系统管理->全局工具配置中配置 JDK,以 JDK 17 为例:
安装 URL:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
在系统管理->全局工具配置中配置 Maven,以 Maven 3.9 为例:
下载完 Maven 后还需要修改镜像地址,避免出现下载速度过慢的问题:
# 进入 Maven 配置文件目录 cd jenkins/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/ # 编辑配置文件 vim maven-3.9.9/conf/settings.xml # 替换原镜像地址 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
::: tip 注意
使用 Jenkins 的安装方式中,会将软件安装到对应目录的下一层目录,例如 JDK 安装
到 jenkins/jenkins_home/tools/hudson.model.JDK/jdk-17/jdk-17.0.12
,导致出现找不到 JDK 的问题。
解决方法:来到对应的目录中,将 JDK 的目录移动到上一层目录即可。
cd jenkins/jenkins_home/tools/hudson.model.JDK/jdk-17 mv jdk-17.0.12/* . rm -rf jdk-17.0.12
:::
创建及配置任务
在 Jenkins 主页点击新建任务,选择构建一个 maven 项目,点击确定:
源码管理
在源码管理中选择 Git,填写仓库地址、凭证、分支等信息:
构建触发器
在构建触发器中选择 Generic Webhook Trigger,填写 Token,点击应用:
这时来到 Git 远程仓库的 Webhook 配置页面,填写 Jenkins URL 和 Token,点击添加:
URL 格式:http://[ip]:10000/generic-webhook-trigger/invoke?token=Token
构建
由于 pom.xml
在项目根目录下,所以这边默认使用 pom.xml
进行构建:
构建后操作
勾选 Run only if build succeeds
,填写 Shell 脚本:
# 删除旧容器 docker rm -f my-spring-boot # 删除旧镜像 docker rmi -f my-spring-boot:latest # 构建新镜像 docker build -t my-spring-boot . # 运行容器 docker run --name my-spring-boot -p 8080:8080 -d my-spring-boot:latest
点击保存,任务配置完成。
构建任务
在 Jenkins 主页点击任务名称,点击立即构建,可以看到正在构建的历史过程。点击构建历史中的任务,可以查看详细的构建日志:
多尝试几次,确保构建成功。
测试
在浏览器中输入指定 URL,可以看到项目已经部署成功。并且当 Git 仓库中的项目有更新时,Jenkins 会自动触发任务,实现自动化部署:
总结
到此这篇关于Jenkins中自动化部署Spring Boot项目的文章就介绍到这了,更多相关Jenkins自动化部署SpringBoot项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论