原理图

Docker Jenkins自动化部署Spring Boot项目 - 图1

操作步骤

实验主机:172.16.250.13172.16.250.14172.16.250.15172.16.250.17

一、搭建 Jenkins

安装插件 Publish Over SSH

image.png

把实验主机都录入 Publish over SSH

image.png
image.png
依次录入主机:
image.png

二、创建 dockerfile 文件

在项目根目录创建 dockerfile 文件:

  1. # 使用 oracle 官方的 jdk 镜像
  2. FROM openjdk:11.0.13-oraclelinux7
  3. # 将 jar 包添加到容器中并命名为 app.jar,该文件会被放到容器的根目录
  4. ADD ruoyi-admin/target/learning-platform.jar app.jar
  5. # 运行 jar 包
  6. ENTRYPOINT ["java","-jar","/app.jar"]

三、创建 jenkins.sh 脚本文件

在根目录下创建 jenkins/jenkins.sh,这个脚本用于打包 maven 项目,构建 docker 镜像,推送构建的镜像到远程仓库:

  1. #!/bin/bash
  2. IMAGE_NAME=registry.cn-shenzhen.aliyuncs.com/runqin-default/learning-platform:latest
  3. docker login --username=广州润沁教育科技有限公司 --password 马赛克 registry.cn-shenzhen.aliyuncs.com
  4. # 使用 maven docker 镜像打包
  5. docker run --rm -v $PWD:/java -v "$HOME/.m2":/root/.m2 -w /java maven:3.8.4-openjdk-11 mvn clean package
  6. # 使用 dockerfile 构建镜像
  7. docker build -t $IMAGE_NAME .
  8. # 推送镜像到远程
  9. docker push $IMAGE_NAME

解释打包命令

避免在服务器安装 mavenjdk 环境,使用 maven 镜像打包:

  1. $ docker run --rm -v $PWD:/java -v "$HOME/.m2":/root/.m2 -w /java maven:3.8.4-openjdk-11 mvn clean package

--rm:运行一个临时容器,即打包完就删除容器
-v $PWD:/java:把当前项目源码挂载到容器的 /java 目录中
-v "$HOME/.m2":/root/.m2$HOME/.m2maven 的依赖缓存目录,把它挂载到容器中,不用每次打包都下载依赖
-w /java:指定工作目录,即为源码目录
maven:3.8.4-openjdk-11maven 镜像名称,可根据实际情况修改
mvn clean packagemaven 清除、打包命令

四、创建 jenkins-ssh-publishers.sh 脚本

在根目录下创建 jenkins/jenkins-ssh-publishers.sh,这个脚本用于拉取最新的镜像,并使用最新的镜像重启容器:

  1. IMAGE_NAME=registry.cn-shenzhen.aliyuncs.com/runqin-default/learning-platform:latest
  2. docker login --username=广州润沁教育科技有限公司 --password 马赛克 registry.cn-shenzhen.aliyuncs.com
  3. # 停止容器、删除容器
  4. docker stop learning-platform-8085 && docker rm learning-platform-8085
  5. # 删除旧镜像
  6. docker image rm $IMAGE_NAME
  7. # 拉取新镜像
  8. docker pull $IMAGE_NAME
  9. # 使用新镜像启动
  10. docker run -d -p 8085:8084 --name=learning-platform-8085 --restart always $IMAGE_NAME

完成上面的三个脚本文件创建之后项目目录结构如下图:
image.png

五、配置 jenkins

增加执行 shell 步骤

在 jenkins 主机上执行 jenkins/jenkins.sh 脚本:
image.png

增加 SSH Publishers

jenkins/jenkins-ssh-publishers.sh 传输到远程主机并执行:
image.png
把实验主机都依次加入,注意勾选 Verbose output in console 打印远程 SHELL 执行日志,Source files 代表要传输到远程主机的文件,Exec command 代表在远程主机执行的命令。