docker+jenkins+springboot终极自动化部署攻略

5,070 阅读4分钟

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

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

docker下安装jenkins

拉取jenkins镜像

docker pull jenkins/jenkins

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

查看已经安装的镜像

docker images

运行镜像

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

简单解释一下这个语句

  • -d 表示已守护线程运行,即为后台运行
  • -p 表示docker容器和端口的映射,后面的是容器的端口,前面的是宿主机的端口,
  • -v 表示数据卷的映射,后面是容器内的文件夹地址,前面为宿主机的

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

[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

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

示例
选择第一个默认安装

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

至此, jenkins已经安装完毕啦


jenkins部署springboot

配置项目的Dockerfile

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

FROM 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 点击新增

图片

  • Name为服务器名称
  • Hostname填写服务器ip
  • userName填写用户名
  • RemoteDirectory指工作目录,比如填写/tmp 发送过去的所有文件默认在/tmp下

示例

点击高级->选择Use password authentication,or use a different key 输入密码或者输入秘钥

示例

点击保存退出

创建任务

首页点击新建任务

示例

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

示例

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

示例

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

示例

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

示例

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

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

rsync -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 意为向远程服务器发送文件并执行命令

示例

选择之前填写好的服务器,sourcefiles填写**/DockerFile remote directory 即为远程发送过去的文件地址

示例

execCommand中输入以下脚本:

#!/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

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

示例

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

示例

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

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

小阿宅Java