svn+jenkins+docker实现自动化打包部署


版权声明:本文为博主原创文章,未经博主允许不得转载。
https://blog.csdn.net/a651653802/article/details/118972721

一、目的说明

在java项目开发过程中,软件开发复杂度不断提高,团队成员间协同工作以确保软件开发的质量成为开发过程中不可回避的问题。敏捷开发模式在软件工程领域越来越重要,快速迭代产品的过程中,错误也会不期而至。

部署项目测试会涉及到频繁的打包部署,特别是前后端分离后,会经常修改接口,这样会造成部署次数线性增加。

每次的集成需要自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。软件测试不能成为短板,软件测试工作更需要快速迭代,快速适应和保证软件的质量显得尤其重要。

因此,为了解决日常开发中频繁项目部署问题,决定搭建Jenkins服务来构建一个自动化编译、打包、部署应用平台。

此文档将搭建一个以Jenkins为主的持续集成平台,并且演示一个maven工程的自动打包发布过程。

除maven工程的打包部署,文档还将说明Vue前端工程以及JavaWeb war包如何通过Jenkins进行自动打包部署。

二、技术简介

Jenkins提供了一种易于使用的持续集成系统,用于持续、自动构建、测试软件项目和监控外部任务运行。使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上; 兼容ant、maven和gradle构建插件,与svn、git无缝集成,实现gitlab、github数据交互。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

三、服务器要求

两台服务器,一台windows,一台linux
windows 系统要求7或以上
linux 系统要求为CentOS7

四、总体流程设计

svn+jenkins+docker实现自动化打包部署

五、搭建步骤

1.Jenkins安装配置

jenkins安装在windows环境下

1.1 安装配置jdk

  1. 下载jdk安装包
  2. 安装jdk安装包
  3. 配置JAVA_HOME环境变量
  4. 在PATH环境变量后面加上%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

1.2 安装配置maven

  1. 下载maven压缩包
  2. 将maven压缩包解压到指定目录
  3. 配置MAVE_HOME环境变量
  4. 在PATH环境变量后面加上%MAVE_HOME%\bin

1.3 安装tomcat

  1. 下载tomcat压缩包
  2. 配置tomcat端口为8199
  3. 运行startup.bat,启动tomcat,访问localhost: 8199,测试是否能够正常访问

1.4 部署jenkins

  1. 下载jenkins.war
  2. 将jenkins.war拷贝到tomcat的webapps目录
  3. 回到tomcat的bin目录点击startup.bat启动tomcat
  4. 访问http://localhost: 8199/jenkins/
    svn+jenkins+docker实现自动化打包部署
  5. 选择插件安装,这里选择安装推荐的插件,等待插件安装完毕
    svn+jenkins+docker实现自动化打包部署
    svn+jenkins+docker实现自动化打包部署
  6. 开始使用jenkins
    svn+jenkins+docker实现自动化打包部署

1.5 配置jenkins

  1. 安装以下几种插件,使用jenkins自带的插件搜索通过名称搜素即可
    NodeJS Plugin
    Maven Integration plugin
    Publish Over SSH
    Subversion Plug-in
    输入插件名称搜索,插件勾选后点击“Install without restart”。
    svn+jenkins+docker实现自动化打包部署
    svn+jenkins+docker实现自动化打包部署
  2. 全局工具配置
    svn+jenkins+docker实现自动化打包部署
    JDK配置
    svn+jenkins+docker实现自动化打包部署
    ANT配置,此配置打包java web项目war包时会用到
    svn+jenkins+docker实现自动化打包部署
    MAVEN配置,此配置打包maven项目时会用到
    svn+jenkins+docker实现自动化打包部署
    NODEJS配置,此配置打包VUE项目时会用到
    svn+jenkins+docker实现自动化打包部署

点击保存
svn+jenkins+docker实现自动化打包部署

1.6. jenkins插件下载失败解决方案

  1. 将.jenkins/hudson.model.UpdateCenter.xml文件中的网址改为
    http://mirror.xmission.com/jenkins/updates/update-center.json
  2. 下载http://mirror.xmission.com/jenkins/updates/update-center.json文件
    修改改文件
    svn+jenkins+docker实现自动化打包部署
    将所有https://updates.jenkins.io/download/plugins
    替换成http://mirror.xmission.com/jenkins/plugins
    将update-center.json文件名改为default.json,并且替换.jenkins\updates\default.json,然后重启jenkins
    参考网址:解决jenkins插件无法下载

2.Docker安装配置

2.1 linux安装jdk

下载jdk包上传到linux服务器

tar zxf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91 /usr/local/jdk1.8
vim /etc/profile

在profile最后添加以下环境变量

export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

Esc :wq 保存文件
执行source命令使profile生效

source /etc/profile

运行java命令查看是否安装成功

java –version

svn+jenkins+docker实现自动化打包部署

2.2 下载安装Docker

2.1.1 安装环境

此处以CentOS7为例安装Docker,可以使用以下命令查看CentOS版本

lsb_release -a 或者  cat  /etc/redhat-release

svn+jenkins+docker实现自动化打包部署
在CentOS7安装docker要求系统为64位、系统内核版本为 3.10 以上,可以使用以下命令查看

uname –r

svn+jenkins+docker实现自动化打包部署

2.1.2 yum安装

查看是否已安装docker列表

yum list installed | grep docker

svn+jenkins+docker实现自动化打包部署
安装docker

yum -y install docker

-y表示不询问安装,直到安装成功,安装完后再次查看安装列表
svn+jenkins+docker实现自动化打包部署
启动docker

systemctl start docker    

查看docker服务状态

systemctl status docker

svn+jenkins+docker实现自动化打包部署
注意事项
docker安装好之后拉取镜像的时候可能会失败,若失败可尝试新建或修改
/etc/docker/daemon.json文件
插入这个json

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}   

然后尝试重新拉取镜像

3. Maven项目自动打包发布

3.1 构建Docker镜像

3.1.1 创建dockerfile文件

mkdir /usr/docker_tale 
cd usr/docker_tale/
vim Dockerfile

文件内容

FROM centos:7
RUN yum install epel-release -y
RUN yum install nginx supervisor -y && yum clean all
RUN sed -i '47a proxy_pass http://127.0.0.1:9000;' /etc/nginx/nginx.conf
COPY supervisord.conf /etc/supervisord.conf
ENV PATH /usr/local/jdk1.8/bin:$PATH
WORKDIR /tale
CMD ["/usr/bin/supervisord"]

Esc :wq 保存文件

3.1.2 创建supervisord配置文件

vim supervisord.conf

文件内容

[supervisord]
nodaemon=true
[program:tale]
command=/usr/local/jdk/bin/java -jar /tale/tale-latest.jar
autostart=true
autorestart=true
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true

Esc :wq 保存文件

3.1.3 构建镜像

注意最后一个"."符号不要忽略了

docker build -t tale:base .

查看镜像是否构建成功

docker images

svn+jenkins+docker实现自动化打包部署
为镜像打上tag

docker tag tale:base 服务器ip:5000/tale:base

要创建一个/data目录下面一个tale目录,因为后面配置Jenkins的时候会把项目传到/data目录下,然后把/data/tale这个目录映射到docker容器里面的工作目录下

mkdir -p /data/tale

3.2. Jenkins Publish over SSH配置构建Docker镜像

此设置主要用于打包后,上传服务器的设置,设置服务器ip、用户命、密码、上传目录等。
svn+jenkins+docker实现自动化打包部署

  1. 拉到Publish over SSH,点击新增
    svn+jenkins+docker实现自动化打包部署
    svn+jenkins+docker实现自动化打包部署
  2. 根据提示填入内容,点击高级选项
    svn+jenkins+docker实现自动化打包部署
  3. 勾选使用密码验证

svn+jenkins+docker实现自动化打包部署
4. 输入服务器密码
svn+jenkins+docker实现自动化打包部署
5. 设置完成后点击测试,当输出为Success时证明连接服务器成功
svn+jenkins+docker实现自动化打包部署
6. 点击保存
svn+jenkins+docker实现自动化打包部署

3.3 Jenkins Maven项目自动打包部署

  1. 点击New Item新建项目
    svn+jenkins+docker实现自动化打包部署
  2. 输入项目名称,选择构建maven项目,点击确定
    svn+jenkins+docker实现自动化打包部署
  3. 源码管理,选择svn,输入项目svn地址,并且添加账号密码
    svn+jenkins+docker实现自动化打包部署
  4. 构建触发器可根据需要自定义
    svn+jenkins+docker实现自动化打包部署
  5. 构建环境选择 Send files or execute commands over SSH after the build runs
    5.1 SSH Server Name选择3.2步骤配置好的选项
    5.2 Source files 是需要上传的源文件路径,注意此处需要填写相对路径,即路径的起始是以工程目录根目录开始的
    5.3 Remove prefix是需要去除的前缀,这里把target去掉
    5.4 Remote directory是上传服务器中的文件夹名称这里要上传到的文件夹是tale
    5.5 这几个配置项配置完成之后就是将工程目录下target文件夹下所有jar包上传到远程服务器指定目录的tale文件夹当中去
    svn+jenkins+docker实现自动化打包部署
    svn+jenkins+docker实现自动化打包部署
    5.6 Exec command 上传完成之后执行的命令,以下面为准
docker rm -f tale-test  删除运行中的容器 tale-test
docker run -itd \ 运行容器
--name tale-test \  容器名称为tale-test
-p 9865:9865 \ 映射端口 本机端口:容器端口
-v /usr/local/jdk1.8:/usr/local/jdk \  挂载目录 -v 本机目录:容器目录
-v /data/tale:/tale \  挂载目录  -v 本机目录:容器目录
xxx.xxx.xxx.xxx:5000/tale:base  使用的镜像
  1. 设置Build点击保存
    svn+jenkins+docker实现自动化打包部署
  2. 点击项目Eureka

svn+jenkins+docker实现自动化打包部署
8. 开始构建
svn+jenkins+docker实现自动化打包部署
9. 点击构建任务
svn+jenkins+docker实现自动化打包部署
10. 点击控制台输出
svn+jenkins+docker实现自动化打包部署
11. 编译成功、上传成功
svn+jenkins+docker实现自动化打包部署
12. 使用docker ps 命令查看运行的容器

svn+jenkins+docker实现自动化打包部署
13. 访问该容器,xxx.xxx.xxx.xxx:9865/Eureka
svn+jenkins+docker实现自动化打包部署
至此maven自动打包发布就完成了
14. 注意事项,Maven仓库需要提前配置好,如果Maven配置有问题的话将导致无法正常打包

4. Vue项目自动打包发布

4.1 构建Docker镜像

  1. 创建docker文件目录
mkdir /usr/docker_vue
mkdir /usr/docker_vue/dist
  1. 创建dockerfile
cd /usr/docker_vue
vim dockerfile

文件内容

# 设置基础镜像
FROM nginx
# 定义作者
MAINTAINER yjw
# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY /dist  /usr/share/nginx/html/

Esc :wq 保存文件
3. 将docker文件保存这一步就结束了

4.2 Jenkins Publish over SSH配置

  1. 新配置一个SSH Server,这里配置步骤不在复述,主要注意的是路径,配置好后点击保存
    svn+jenkins+docker实现自动化打包部署

4.3 Jenkins Vue项目自动打包部署

  1. 点击New Item新建项目
    svn+jenkins+docker实现自动化打包部署
  2. 输入名称,freestyle project,点击确定
    svn+jenkins+docker实现自动化打包部署
  3. 源码管理选择svn,输入svn地址以及账号密码
    svn+jenkins+docker实现自动化打包部署
  4. 构建环境,勾选Provide Node & npm bin/ folder to PATH,选择全局环境配置时配置的nodejs,此选项依赖NodeJs插件,需要根据文档中安装插件、全局工具配置步骤配置好后才能使用
    svn+jenkins+docker实现自动化打包部署
    5.增加构建步骤, Execute Windows batch command
    svn+jenkins+docker实现自动化打包部署
  5. 由于jenkins是部署在windows平台的,所以这里选择执行windows批处理命令
call npm install
call npm run build

注意此处命令中的call是必不可少的!
svn+jenkins+docker实现自动化打包部署
6. 增加构建步骤, Send files or execute commands over SSH
svn+jenkins+docker实现自动化打包部署
7. 按照每项输入对应内容
7.1. 名称下拉选择之前配置好的ssh服务器
7.2. 源文件路径填写相对路径,以工程根目录开始,例如/dist/**/* 就是根目录下dist文件夹下所有的文件夹与文件
7.3. 要去除的路径前缀就是字面意思
7.4. 上传到服务器的文件夹名称
7.5. 其实图中的Remove prefix与Remote directory可以不填,效果是一样的
7.6. 执行命令说明

docker rm -f vuetest  删除运行中的容器
docker rmi vuetest:base 删除镜像
cd /usr/docker_vue 进入/usr/docker_vue目录
docker build -t vuetest:base . 构建镜像
docker run -p 8888:80 -d --name vuetest vuetest:base  启动容器

svn+jenkins+docker实现自动化打包部署
7.7. 点击保存
svn+jenkins+docker实现自动化打包部署
8. 点击vueTest项目
svn+jenkins+docker实现自动化打包部署
9. 开始构建
svn+jenkins+docker实现自动化打包部署
10. 点击构建任务、选择控制台输出
svn+jenkins+docker实现自动化打包部署
svn+jenkins+docker实现自动化打包部署
11. 打包部署成功
svn+jenkins+docker实现自动化打包部署
12. 执行docker ps 查看运行的容器
svn+jenkins+docker实现自动化打包部署
13. 浏览器访问xxx.xxx.xxx.xxx:8888
svn+jenkins+docker实现自动化打包部署
vue项目的打包部署就完成了

  1. 注意事项, vue项目上传至SVN服务器时不要带node_modules,否则太大,Jenkins拉取代码时会非常耗时,并且会由于Jenkins编译时会对node_modules进行修改,而造成版本与服务器不一致,导致每次构建都需要清除整个工作空间重新拉取代码非常耗时。

5. Java web War项目自动打包发布

5.1 构建Docker镜像

  1. 创建war包存放目录
mkdir /usr/docker_tomcat
  1. 搜索tomcat镜像
docker search tomcat

svn+jenkins+docker实现自动化打包部署
3. 根据名字下载docker

docker pull tomcat

svn+jenkins+docker实现自动化打包部署
4. 使用命令查看镜像

docker images

svn+jenkins+docker实现自动化打包部署
5. 运行容器

docker run -d -p 8988:8080 --name tomcat tomcat:latest

svn+jenkins+docker实现自动化打包部署
6. tomcat镜像下载后运行后访问可能会出现404的情况
svn+jenkins+docker实现自动化打包部署
7. 执行命令修改运行中的容器
进入容器

docker exec -it tomcat /bin/bash

svn+jenkins+docker实现自动化打包部署

ls -l

svn+jenkins+docker实现自动化打包部署
将webapps修改为webapps2 将webapps.dist修改为 webapps

mv webapps webapps2
mv webapps.dist/ webapps

svn+jenkins+docker实现自动化打包部署
按住Ctrl+p+q返回宿主机
svn+jenkins+docker实现自动化打包部署
执行以下命令,生成一个新的镜像
docker commit -a=‘作者’ -m=‘修改内容’ 容器名称或者ID 新生成镜像的名称

docker commit -a='yjw' -m='修改tomcat webapps目录' tomcat tomcat-01xx
docker images
  1. 之后就可以使用这个新的镜像,不会在出现404的情况了,然后再把之前启动的tomcat容器删掉
docker rm –f 容器ID

5.2 Jenkins Publish over SSH配置

  1. 配置ssh Server 配置步骤不再复述,可以参考前文,配置完成后点击保存
    svn+jenkins+docker实现自动化打包部署

5.3 Jenkins War项目自动打包部署

  1. 点击New Item新建项目
    svn+jenkins+docker实现自动化打包部署
  2. 输入名称,freestyle project,点击确定
    svn+jenkins+docker实现自动化打包部署
  3. 源码管理选择svn,输入svn地址以及账号密码
    svn+jenkins+docker实现自动化打包部署
  4. 设置Send files or execute commands over SSH after the build runs
    svn+jenkins+docker实现自动化打包部署
    执行命令说明
docker rm -f tomcat-test  删除运行中的容器
docker run -itd --name tomcat-test -p 8099:8080 -v /usr/docker_tomcat/:/usr/local/tomcat/webapps tomcat_xxx01:latest  
run运行容器  --name命名容器 -p映射端口 -v挂载目录 使用镜像
  1. 增加构建步骤,选择Invoke Ant
    svn+jenkins+docker实现自动化打包部署
  2. 下拉选择jenkins全局配置时配置的Ant

svn+jenkins+docker实现自动化打包部署
7. 如果不设置build文件的路径,则插件会从项目跟目录下寻找build文件,也可以自己指定build的路径和名称,这样的话插件会使用你指定的文件进行war包的构建
svn+jenkins+docker实现自动化打包部署
svn+jenkins+docker实现自动化打包部署
8. 点击保存按钮

svn+jenkins+docker实现自动化打包部署
9. 点击项目

svn+jenkins+docker实现自动化打包部署
10. 开始构建
svn+jenkins+docker实现自动化打包部署
11. 点击构建任务
svn+jenkins+docker实现自动化打包部署
12. 构建上传成功
svn+jenkins+docker实现自动化打包部署
13. 访问http://xxx.xxx.xxx.xxx:8099/warTest/
至此war包打包自动部署就完成了

  1. 注意事项,javaweb项目是通过Ant打包的,因此项目目录下必须要有build.xml文件

6. Docker 管理平台portainer安装

portainer安装在docker服务器下

  1. 拉取镜像
docker pull portainer/portainer-ce
docker images

svn+jenkins+docker实现自动化打包部署
2. 运行容器

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name portainer portainer/portainer-ce
docker ps

svn+jenkins+docker实现自动化打包部署
3. 访问http://xxx.xxx.xxx.xxx:9000,设置账号与密码
svn+jenkins+docker实现自动化打包部署
4. 选择Docker
svn+jenkins+docker实现自动化打包部署
在选择docker时可能会出现无法连接的情况,
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
参考网址: portainer无法连接Docker服务器
5. 至此我们就能通过portainer平台管理我们的Docker镜像与容器了
svn+jenkins+docker实现自动化打包部署
svn+jenkins+docker实现自动化打包部署
容器管理界面

svn+jenkins+docker实现自动化打包部署
镜像管理界面
svn+jenkins+docker实现自动化打包部署
portainer平台还有许多其他功能,有兴趣可自行探索,目前主要使用的主要是该平台对Docker镜像与容器的管理功能。

7. Jenkins实现打包时替换配置文件

  1. 创建docker文件目录
    下载插件Config File Provider的hpi文件,下载网址
  2. 安装插件,选择下载好的hpi文件,点击上传,然后重启Jenkins
    svn+jenkins+docker实现自动化打包部署
    svn+jenkins+docker实现自动化打包部署
    svn+jenkins+docker实现自动化打包部署
  3. 增加一个配置文件,可在项目打包配置中选择替换该文件,填写文件名称,文件内容,然后提交
    svn+jenkins+docker实现自动化打包部署
    svn+jenkins+docker实现自动化打包部署
    svn+jenkins+docker实现自动化打包部署
  4. 修改项目打包配置,点击保存
    svn+jenkins+docker实现自动化打包部署
    完成以上配置,项目打包时会自动替换配置文件
上一篇:第9个练习


下一篇:Jenkins+maven+Tomcat+SVN一键自动打包部署应用到服务器