版权声明:本文为博主原创文章,未经博主允许不得转载。
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
四、总体流程设计
五、搭建步骤
1.Jenkins安装配置
jenkins安装在windows环境下
1.1 安装配置jdk
- 下载jdk安装包
- 安装jdk安装包
- 配置JAVA_HOME环境变量
- 在PATH环境变量后面加上%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
1.2 安装配置maven
- 下载maven压缩包
- 将maven压缩包解压到指定目录
- 配置MAVE_HOME环境变量
- 在PATH环境变量后面加上%MAVE_HOME%\bin
1.3 安装tomcat
- 下载tomcat压缩包
- 配置tomcat端口为8199
- 运行startup.bat,启动tomcat,访问localhost: 8199,测试是否能够正常访问
1.4 部署jenkins
- 下载jenkins.war
- 将jenkins.war拷贝到tomcat的webapps目录
- 回到tomcat的bin目录点击startup.bat启动tomcat
- 访问http://localhost: 8199/jenkins/
- 选择插件安装,这里选择安装推荐的插件,等待插件安装完毕
- 开始使用jenkins
1.5 配置jenkins
- 安装以下几种插件,使用jenkins自带的插件搜索通过名称搜素即可
NodeJS Plugin
Maven Integration plugin
Publish Over SSH
Subversion Plug-in
输入插件名称搜索,插件勾选后点击“Install without restart”。
- 全局工具配置
JDK配置
ANT配置,此配置打包java web项目war包时会用到
MAVEN配置,此配置打包maven项目时会用到
NODEJS配置,此配置打包VUE项目时会用到
点击保存
1.6. jenkins插件下载失败解决方案
- 将.jenkins/hudson.model.UpdateCenter.xml文件中的网址改为
http://mirror.xmission.com/jenkins/updates/update-center.json - 下载http://mirror.xmission.com/jenkins/updates/update-center.json文件
修改改文件
将所有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
2.2 下载安装Docker
2.1.1 安装环境
此处以CentOS7为例安装Docker,可以使用以下命令查看CentOS版本
lsb_release -a 或者 cat /etc/redhat-release
在CentOS7安装docker要求系统为64位、系统内核版本为 3.10 以上,可以使用以下命令查看
uname –r
2.1.2 yum安装
查看是否已安装docker列表
yum list installed | grep docker
安装docker
yum -y install docker
-y表示不询问安装,直到安装成功,安装完后再次查看安装列表
启动docker
systemctl start docker
查看docker服务状态
systemctl status 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
为镜像打上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、用户命、密码、上传目录等。
- 拉到Publish over SSH,点击新增
- 根据提示填入内容,点击高级选项
- 勾选使用密码验证
4. 输入服务器密码
5. 设置完成后点击测试,当输出为Success时证明连接服务器成功
6. 点击保存
3.3 Jenkins Maven项目自动打包部署
- 点击New Item新建项目
- 输入项目名称,选择构建maven项目,点击确定
- 源码管理,选择svn,输入项目svn地址,并且添加账号密码
- 构建触发器可根据需要自定义
- 构建环境选择 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文件夹当中去
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 使用的镜像
- 设置Build点击保存
- 点击项目Eureka
8. 开始构建
9. 点击构建任务
10. 点击控制台输出
11. 编译成功、上传成功
12. 使用docker ps 命令查看运行的容器
13. 访问该容器,xxx.xxx.xxx.xxx:9865/Eureka
至此maven自动打包发布就完成了
14. 注意事项,Maven仓库需要提前配置好,如果Maven配置有问题的话将导致无法正常打包
4. Vue项目自动打包发布
4.1 构建Docker镜像
- 创建docker文件目录
mkdir /usr/docker_vue
mkdir /usr/docker_vue/dist
- 创建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配置
- 新配置一个SSH Server,这里配置步骤不在复述,主要注意的是路径,配置好后点击保存
4.3 Jenkins Vue项目自动打包部署
- 点击New Item新建项目
- 输入名称,freestyle project,点击确定
- 源码管理选择svn,输入svn地址以及账号密码
- 构建环境,勾选Provide Node & npm bin/ folder to PATH,选择全局环境配置时配置的nodejs,此选项依赖NodeJs插件,需要根据文档中安装插件、全局工具配置步骤配置好后才能使用
5.增加构建步骤, Execute Windows batch command
- 由于jenkins是部署在windows平台的,所以这里选择执行windows批处理命令
call npm install
call npm run build
注意此处命令中的call是必不可少的!
6. 增加构建步骤, Send files or execute commands over SSH
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 启动容器
7.7. 点击保存
8. 点击vueTest项目
9. 开始构建
10. 点击构建任务、选择控制台输出
11. 打包部署成功
12. 执行docker ps 查看运行的容器
13. 浏览器访问xxx.xxx.xxx.xxx:8888
vue项目的打包部署就完成了
- 注意事项, vue项目上传至SVN服务器时不要带node_modules,否则太大,Jenkins拉取代码时会非常耗时,并且会由于Jenkins编译时会对node_modules进行修改,而造成版本与服务器不一致,导致每次构建都需要清除整个工作空间重新拉取代码非常耗时。
5. Java web War项目自动打包发布
5.1 构建Docker镜像
- 创建war包存放目录
mkdir /usr/docker_tomcat
- 搜索tomcat镜像
docker search tomcat
3. 根据名字下载docker
docker pull tomcat
4. 使用命令查看镜像
docker images
5. 运行容器
docker run -d -p 8988:8080 --name tomcat tomcat:latest
6. tomcat镜像下载后运行后访问可能会出现404的情况
7. 执行命令修改运行中的容器
进入容器
docker exec -it tomcat /bin/bash
ls -l
将webapps修改为webapps2 将webapps.dist修改为 webapps
mv webapps webapps2
mv webapps.dist/ webapps
按住Ctrl+p+q返回宿主机
执行以下命令,生成一个新的镜像
docker commit -a=‘作者’ -m=‘修改内容’ 容器名称或者ID 新生成镜像的名称
docker commit -a='yjw' -m='修改tomcat webapps目录' tomcat tomcat-01xx
docker images
- 之后就可以使用这个新的镜像,不会在出现404的情况了,然后再把之前启动的tomcat容器删掉
docker rm –f 容器ID
5.2 Jenkins Publish over SSH配置
- 配置ssh Server 配置步骤不再复述,可以参考前文,配置完成后点击保存
5.3 Jenkins War项目自动打包部署
- 点击New Item新建项目
- 输入名称,freestyle project,点击确定
- 源码管理选择svn,输入svn地址以及账号密码
- 设置Send files or execute commands over SSH after the build runs
执行命令说明
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挂载目录 使用镜像
- 增加构建步骤,选择Invoke Ant
- 下拉选择jenkins全局配置时配置的Ant
7. 如果不设置build文件的路径,则插件会从项目跟目录下寻找build文件,也可以自己指定build的路径和名称,这样的话插件会使用你指定的文件进行war包的构建
8. 点击保存按钮
9. 点击项目
10. 开始构建
11. 点击构建任务
12. 构建上传成功
13. 访问http://xxx.xxx.xxx.xxx:8099/warTest/
至此war包打包自动部署就完成了
- 注意事项,javaweb项目是通过Ant打包的,因此项目目录下必须要有build.xml文件
6. Docker 管理平台portainer安装
portainer安装在docker服务器下
- 拉取镜像
docker pull portainer/portainer-ce
docker images
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
3. 访问http://xxx.xxx.xxx.xxx:9000,设置账号与密码
4. 选择Docker
在选择docker时可能会出现无法连接的情况,
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
参考网址: portainer无法连接Docker服务器
5. 至此我们就能通过portainer平台管理我们的Docker镜像与容器了
容器管理界面
镜像管理界面
portainer平台还有许多其他功能,有兴趣可自行探索,目前主要使用的主要是该平台对Docker镜像与容器的管理功能。
7. Jenkins实现打包时替换配置文件
- 创建docker文件目录
下载插件Config File Provider的hpi文件,下载网址 - 安装插件,选择下载好的hpi文件,点击上传,然后重启Jenkins
- 增加一个配置文件,可在项目打包配置中选择替换该文件,填写文件名称,文件内容,然后提交
- 修改项目打包配置,点击保存
完成以上配置,项目打包时会自动替换配置文件