版权声明:本文为博主原创文章,未经博主允许不得转载。
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
jenkins安装在windows环境下
下载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
此处以CentOS7为例安装Docker,可以使用以下命令查看CentOS版本
lsb_release -a 或者 cat /etc/redhat-release
在CentOS7安装docker要求系统为64位、系统内核版本为 3.10 以上,可以使用以下命令查看
uname –r
查看是否已安装docker列表
yum list installed | grep 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"]
}
然后尝试重新拉取镜像
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 保存文件
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 保存文件
注意最后一个"."符号不要忽略了
docker build -t tale:base .
查看镜像是否构建成功
docker images
docker tag tale:base 服务器ip:5000/tale:base
要创建一个/data目录下面一个tale目录,因为后面配置Jenkins的时候会把项目传到/data目录下,然后把/data/tale这个目录映射到docker容器里面的工作目录下
mkdir -p /data/tale
此设置主要用于打包后,上传服务器的设置,设置服务器ip、用户命、密码、上传目录等。
4. 输入服务器密码
5. 设置完成后点击测试,当输出为Success时证明连接服务器成功
6. 点击保存
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 使用的镜像
8. 开始构建
9. 点击构建任务
10. 点击控制台输出
11. 编译成功、上传成功
12. 使用docker ps 命令查看运行的容器
13. 访问该容器,xxx.xxx.xxx.xxx:9865/Eureka
至此maven自动打包发布就完成了
14. 注意事项,Maven仓库需要提前配置好,如果Maven配置有问题的话将导致无法正常打包
mkdir /usr/docker_vue
mkdir /usr/docker_vue/dist
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文件保存这一步就结束了
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项目的打包部署就完成了
mkdir /usr/docker_tomcat
docker search tomcat
docker pull tomcat
docker images
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
docker rm –f 容器ID
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挂载目录 使用镜像
7. 如果不设置build文件的路径,则插件会从项目跟目录下寻找build文件,也可以自己指定build的路径和名称,这样的话插件会使用你指定的文件进行war包的构建
8. 点击保存按钮
9. 点击项目
10. 开始构建
11. 点击构建任务
12. 构建上传成功
13. 访问http://xxx.xxx.xxx.xxx:8099/warTest/
至此war包打包自动部署就完成了
portainer安装在docker服务器下
docker pull portainer/portainer-ce
docker images
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镜像与容器的管理功能。