使用Jenkins+docker 部署springboot项目

安装jenkins

Jenkins介绍

Jenkins是一个普遍用于持续构建的可视化web工具,可用于自动化与构建、测试、交付或部署软件相关的各类任务。
能够经过安装包、tomcat、java、docker方式进行安装使用

官方地址:https://jenkins.io/java

Jenkins下载安装

这里经过tomcat来启动Jenkinsmysql

下载

到官网https://jenkins.io/download/ 下载war包 nginx

部署到tomcat

复制war包到tomcat的webapps目录下,启动tomcat git

解锁

这里提示解锁Jenkins,复制 /Users/Shared/Jenkins/Home/secrets/initialAdminPassword文件内容到页面web

$ cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
xxxxxxxxx

设置用户

解锁成功后,跳转到设置用户页面 redis

这里设置 admin / adminspring

安装默认插件

而后提示安装插件,选择默认的安装,等待安装完成。有些插件可能安装失败,提示要求升级最新版本Jenkins,升级成功后能够安装成功。sql

全局配置

点击 >系统设置>全局工具配置 docker

配置maven、JDK、Docker、git shell

安装docker

springboot项目

代码

项目地址:https://gitee.com/yimingkeji/docker-springboot

Dockerfile内容:

#FROM openjdk:8-jdk-alpine
FROM hub.c.163.com/dwyane/openjdk:8
VOLUME /tmp
ADD docker-springboot-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

而后上传到本身的git地址

使用Jenkins部署项目到docker

在jenkins页面添加自由风格的软件项目

源码管理里添加git仓库和用户名、密码配置,而且选择代码分支(这里是master)

构建步骤中,添加2个步骤

  • 1.顶级maven 选择maven版本(上面的全局配置中配的maven),添加maven打包命令
clean install -Dmaven.test.skip=true
  • 2.执行shell 添加shell:
mvn docker:build
echo "当前docker 镜像:"
docker images | grep dockerspringboot
echo "启动容器----->"
docker run -p 8001:8001 -d dockerspringboot
echo "启动服务成功!"

执行构建并启动服务

上面配置完成后,到Jenkins主页,选择配置好的项目,菜单中点击当即构建

看到左边菜单里有执行的进度条,点进去后会看到执行日志

构建中 在工做空间 /Users/yangzhenlong/.jenkins/workspace/docker-springboot 中
 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
...
 > /usr/bin/git checkout -f de05bbef05fae5ade0c79ce1d49154723d84fa88
Commit message: "修改dockerfile" #git中最后的提交记录
 > /usr/bin/git rev-list --no-walk 330c170c5829017d00942d7301834c2a196a29ac # timeout=10
[docker-springboot] $ /Users/xxxx/apache-maven-3.5.4/bin/mvn -s /Users/xxx/apache-maven-3.5.4/conf/settings.xml -gs /Users/xxx/apache-maven-3.5.4/conf/settings.xml clean install -Dmaven.test.skip=true # 执行maven脚本
[INFO] Scanning for projects...
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.412 s
[INFO] Finished at: 2018-11-19T18:01:54+08:00
[INFO] ------------------------------------------------------------------------
[docker-springboot] $ /bin/sh -xe /Users/yangzhenlong/tools/tomcat8-jenkins/temp/jenkins7206360448776968606.sh
+ mvn docker:build #构建成功后,执行shell脚本开始...
[INFO] Scanning for projects...
...
[INFO] Copying /Users/yangzhenlong/.jenkins/workspace/docker-springboot/src/main/docker/Dockerfile -> /Users/yangzhenlong/.jenkins/workspace/docker-springboot/target/docker/Dockerfile
[INFO] Building image dockerspringboot #执行Dockerfile脚本开始...
Step 1/4 : FROM hub.c.163.com/dwyane/openjdk:8

 ---> 96cddf5ae9f1
Step 2/4 : VOLUME /tmp

 ---> Using cache
 ---> 2e62fad6a16a
Step 3/4 : ADD docker-springboot-1.0-SNAPSHOT.jar app.jar

 ---> 2d1319472a12
Step 4/4 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 ---> Running in f5d8c06b3b7d
Removing intermediate container f5d8c06b3b7d
 ---> 3f24ff705b46
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 3f24ff705b46
Successfully tagged dockerspringboot:latest
[INFO] Built dockerspringboot
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.841 s
[INFO] Finished at: 2018-11-19T18:02:00+08:00
[INFO] ------------------------------------------------------------------------
+ echo '当前docker 镜像:' # dockerFile构建镜像成功后,shell脚本打印docker镜像
当前docker 镜像:
+ docker images 
+ grep dockerspringboot
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
dockerspringboot               latest              3f24ff705b46        1 second ago        657MB
+ echo '启动容器----->'
启动容器-----> #这里的中文会乱码,后面建议使用英文
+ docker run -p 8080:8080 -d dockerspringboot
e0aeafb47410a77f30bcb24b744b49dd57b251594a68da997defeef24c256f2b
+ echo $'�\220��\212��\234\215�\212��\210\220�\212\237�\201'
启动服务成功!
Finished: SUCCESS

而后浏览器访问 localhost:8080

改造shell脚本

若是下次构建该项目的时候,docker镜像和服务已存在,须要先删除镜像和服务

# 先删除以前的容器
echo "remobe old container"
docker ps -a | grep dockerspringboot | awk '{print $1}'| xargs docker rm -f
# 删除以前的镜像
echo "romove old image"
docker rmi dockerspringboot
# 构建镜像
mvn docker:build
# 打印当前镜像
echo "current docker images"
docker images | grep dockerspringboot
# 启动容器
echo "start container"
docker run -p 8001:8001 -d dockerspringboot
# 打印当前容器
echo "current container"
docker ps -a | grep dockerspringboot
echo "star service success!"

输出日志:

+ echo 'current docker images'
current docker images
+ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED                  SIZE
dockerspringboot               latest              8c9f93a324c0        Less than a second ago   657MB
<none>                         <none>              3f24ff705b46        2 hours ago              657MB
<none>                         <none>              e276f4ef3cc5        2 days ago               657MB
<none>                         <none>              02b677ad12e1        2 days ago               657MB
nginx                          latest              dbfc48660aeb        4 weeks ago              109MB
mongo                          latest              a41c82c0998a        2 months ago             380MB
redis                          3.2                 e2e6164a20de        4 months ago             76MB
hub.c.163.com/library/nginx    latest              46102226f2fd        19 months ago            109MB
mysql                          5.7                 9e64176cd8a2        19 months ago            407MB
hub.c.163.com/library/mysql    5.7                 9e64176cd8a2        19 months ago            407MB
hub.c.163.com/dwyane/openjdk   8                   96cddf5ae9f1        2 years ago              641MB
+ echo 'start container'
start container
+ docker run -p 8001:8001 -d dockerspringboot
0b79b907e9ca49831bd9259eeea2c60ec40132342b2ed3c00d4cf183756d6610
+ echo 'current container'
current container
+ docker ps -a
+ grep dockerspringboot
0b79b907e9ca        dockerspringboot              "java -Djava.securit…"   1 second ago        Up Less than a second      0.0.0.0:8001->8001/tcp     happy_johnson
+ echo 'star service success!'
star service success!
Finished: SUCCESS