docker+jenkins+springboot终极智能全自动化部署

本篇文章引导你使用Jenkins部署SpringBoot项目,同时使用Docker和Git实现简单的持续集成和持续部署。

docker下安装jenkins

拉取jenkins镜像

1docker pull jenkins/jenkins

该镜像为最新版镜像 jenkins非最新版 很多插件安装不上

查看已经安装的镜像

1docker images

运行镜像

1docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins/:/var/jenkins_home jenkins/jenkins

简单解释一下这个语句

-d 表示已守护线程运行,即为后台运行

-p 表示docker容器和端口的映射,后面的是容器的端口,前面的是宿主机的端口,

-v 表示数据卷的映射,后面是容器内的文件夹地址,前面为宿主机的

运行docker ps查看是否正常启动

1

2

3

4[root@hyb ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

1e358a510dc5 jenkins/jenkins "/sbin/tini -- /us..." 5 weeks ago Up 33 hours 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp myjenkins

如果未正常启动多半是端口被占用了,运行netstat -tunlp|grep 8080 即可检查端口占用情况

接下来打开浏览器访问 你的ip:8080 即可看到jenkins的安装界面,如果看不到的话检查服务器防火墙设置

首次运行时需要你输入一个密码,打开映射的路径下的secrets/initialAdminPassword,例如 /var/jenkins/secrets/initialAdminPassword

输入密码后会看到安装插件的页面

807F0FAE-5D5A-4eea-8E95-E7CB9A528471.png

选择第一个默认安装

安装完成后创建管理员,填写完成提交即可

至此, jenkins已经安装完毕啦

jenkins部署springboot

配置项目的Dockerfile

在项目的根目录中新建一个文件 名称为Dockerfile ,填入以下内容

1

2

3

4

5

6

7

8

9FROM java:8

VOLUME /tmp

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD service.jar /usr/share/myservice/myservice.jar

RUN bash -c 'touch /usr/share/myservice/myservice.jar'

ADD arthas-boot.jar /arthas-boot.jar

ENTRYPOINT java -Xms512m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -jar /usr/share/myservice/myservice.jar

EXPOSE 8088

对jdk 配置的修改可以自行修改

配置ssh服务器

首页 -> 点击系统管理 -> 管理插件 ->可选插件 -> 过滤:ssh -> 选择Publish Over SSH插件,点击直接安装

jenkins首页,系统管理 -> 系统设置 -> 下拉,找到Publish over SSH 点击新增

EA435BED-D0D1-4f45-B350-64DA41FB12DF.png

Name为服务器名称

Hostname填写服务器ip

userName填写用户名

RemoteDirectory指工作目录,比如填写/tmp 发送过去的所有文件默认在/tmp下

7C7C0CA1-6998-42ab-86CE-C8E7AF0A0236.png

点击高级->选择Use password authentication,or use a different key

输入密码或者输入秘钥

EB98A405-3922-4dca-BEEA-530F4374CCD1.png

点击保存退出

创建任务

首页点击新建任务

1571142842(1).jpg

输入任务名称,选择构建一个maven项目

1571142945.jpg

在general中选择丢弃旧的构建以节省磁盘资源

1571143321(1).jpg

在源码管理中选择git配置好git地址和密码

1571143059(1).jpg

在构建环境中指定根pom.xml文件,并且写好maven打包命令

1571143226(1).jpg

在post steps中选择Run only if build succeeds, 意为在编译成功后执行脚本在add post build step 中选择执行shell 执行sh脚本

jenkins1.png

1571143572(1).jpg

该脚本的作用为发送打包好的jar文件到远程服务器,我们采用rsync 工具来传输,该工具对jar包有特殊支持,不必每次传输所有文件,远程对比文件来增量替换jar文件,前提是在容器中跟远程服务器有ssh免密登陆的权限,并且容器中与目标机器必须都安装了rsync 该工具可以采用apt-get 或者yum直接安装,在脚本中添加

1rsync -av /var/jenkins_home/workspace/你的项目路径/test*.jar 你的用户名@你的IP:/tmp/test/service.jar

修改本行命令中为对应的jar包地址和对应服务器的放置地址

ps:在容器中使用rsync时,需要在容器中生成ssh秘钥,远程连接而不是宿主机

进入容器的命令为docker exec -it 容器名 bash

ssh 免密登陆操作步骤:

1.ssh-keygen 一直回车

2.ssh-copy-id 用户名@ip 输入yes之后输密码就好了

在构建后操作中选择send build artifacts over ssh 意为向远程服务器发送文件并执行命令

jenkins3.png

选择之前填写好的服务器,sourcefiles填写**/DockerFile

remote directory 即为远程发送过去的文件地址

1571144047(1).jpg

execCommand中输入以下脚本:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17#!/bin

# DockerFile和jar包所在的文件夹

DOCKER_FILE_BASE_PATH=

# 修改jar包名称统一改为service.jar

mv $DOCKER_FILE_BASE_PATH/*.jar $DOCKER_FILE_BASE_PATH/service.jar

# 应用名称,也为容器名称

APPLICATION_NAME=

# 镜像名称

IMAGE_NAME=$APPLICATION_NAME:latest

# 停止并删除旧的容器

set -e; docker stop $APPLICATION_NAME && docker rm $APPLICATION_NAME || EXIT_CODE=$? && true;

#删除旧的镜像

set -e; docker rmi $IMAGE_NAME || EXIT_CODE=$? && true;

#构建镜像

docker build -t $IMAGE_NAME $DOCKER_FILE_BASE_PATH

#运行容器

docker run --name $APPLICATION_NAME -e "SPRING_PROFILES_ACTIVE=test" -d -p 8085:8088 -p 10009:10009 $IMAGE_NAME

点击保存,然后左上点击立即构建

1571144758(1).jpg

点击下面的buildhistory中正在构建的一个

1571144824(1).jpg

点击控制台输出,即可查看构建日志,至此整套自动化部署已完全完成

有兴趣可以关注我的个人微信公众号,会定期推送关于Java的技术文章,而且目前不恰饭都是干货哈哈哈哈

qrcode_small.jpg

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐