1. 概述
本文使用Docker、Jenkins和Gitee持续部署SpringBoot项目,小伙伴们需要提前准备好Docker和Jenkins开发环境,有不清楚如何安装Docker和Jenkins的小伙伴可以参阅Docker系列之CentOS8安装Docker和Docker系列之搭建Jenkins持续集成Maven项目
,其中在Docker安装Jenkins时需要加上–privileged=true和-v /usr/bin/docker:/usr/bin/docker以方便在Jenkins中使用Docker指令。完整的安装指令如下:
jenkins:container_name: jenkinsimage: jenkins/jenkins:lts-jdk11restart: unless-stoppedprivileged:trueports:-'8082:8080'-'50000:50000'volumes:- /home/docker/jenkins:/var/jenkins_home:rw- /var/run/docker.sock:/var/run/docker.sock:rw- /home/soft/maven/apache-maven-3.8.5:/var/java/maven- /var/java/repository:/var/java/repository:rw- /usr/bin/docker:/usr/bin/docker
前提环境要求如下:
JDK:11
Maven:3.8.5
Docker:20.10.14
Jenkins:latest
2. 新建SpringBoot项目
2.1. 引入dockerfile插件
新建一个SpringBoot项目,在pom.xml中引入docker镜像制作插件
<plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.13</version><configuration><repository>${project.artifactId}</repository><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin>
2.2. 编写Dockerfile文件
在项目根目录下新建Dockerfile文件,输入以下内容
FROM openjdk:11.0.14.1-oracle
MAINTAINER xxxx
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT["java","-jar","/app.jar"]
EXPOSE 8099
2.3. 编写Jenkins文件
在项目根目录下新建Jenkins文件,输入以下内容
pipeline{
agent any
stages{
stage('pull code'){
steps{
checkout([$class:'GitSCM',branches:[[name:'*/master']],extensions:[],userRemoteConfigs:[[credentialsId:'gitee',url:'https://gitee.com/xlhj023/docker-jenkins.git']]])}}
stage('package and build project, deploy images'){
steps{
sh '/opt/app/deploy.sh'}}}}
本文所使用的Jenkins服务器和目标服务器都是同一台服务器,流水线只有拉取代码和部署项目两个步骤,若需要将应用镜像部署到其他服务器,可以将jar包或镜像文件上传到目标服务器,也可以先将镜像推送到镜像仓库,再从目标服务器拉取镜像进行部署
3. 部署脚本deploy.sh编写
进入Jenkins容器内部,在/opt/app目录下新建deploy.sh文件,输入下面shell脚本
#!/bin/bash
project_name=docker-jenkins
tag=latest
imageId=`docker images-q$project_name`echo"镜像ID为:$imageId"if["$imageId"!=""];then
containerId=`dockerps-a| grep-w$project_name| awk'{print $1}'`echo"容器ID为:$containerId"if["$containerId"!=""];then
docker stop$containerId
dockerrm$containerIdecho"删除容器成功"
fi
docker rmi$imageId
mvn clean package dockerfile:buildelseecho"构建新镜像"
mvn clean package dockerfile:build
fi
docker run-di-p 8099:8099$project_name:$tagecho"启动容器成功"
注意,除了第一次部署外,都需要先将原有的镜像和容器删除,再进行镜像制作和容器发布
4. Jenkins发布流水线
新建一个任务,命名为docker-jenkins,选择流水线,点击确定
进入流水线制作界面,如下图所示:
流水线定义处选择Pipeline script from SCM,在SCM处选择Git,输入Git仓库地址和账户信息,最后点击保存,回到Dashboard界面,点击立即构建
5. 验证
任务构建完成后,进入日志管理控制台查看日志信息
进入服务器,输入命令docker images查看镜像
输入命令docker ps查看容器