
本环境非常简单,主要实现如下流程功能
员工通过eclipse提交java代码———gitlab更新代码————jenkins通过maven编译打包————生成war包————制作docker镜像并上传到私有仓库————web服务器下载镜像————运行容器对外服务
部分说明:
- jenkins服务器上已经安装了maven,并已配置。
- jenkins服务器上安装docker服务。(打包镜像,并上传至私有仓库)
- 提前构建本地gitlab服务器,并上传项目代码,配置用户认证。
- 需要提前创建本地的私有仓库,走公网仓库会非常慢。
- 若jenkins任务不多,可以在jenkins本机上进行docker镜像的制作打包并上传,配置比较简单。若jenkins任务很多,建议单独配置一台docker镜像打包服务器。
- web服务器需要提前配置进jenkins里。
1.jenkins里MAVEN的配置(JDK及MAVEN路径配置,具体可以看我之前的文章)
2.jenkins里新增web服务器(SSH Servers)
3.docker私有仓库的配置(具体可以看我前面的文章)
4.在jenkins中新增maven任务
1)新建任务
2)指定git项目地址以及认证用户,指定分支
3)构建环境配置,maven的选项根据自己情况来填
4)增加post-step,本案例比较简单,通过shell脚本实现
建议在本地服务器上新建一个目录(/app/dockerfile),脚本里把war拷贝过去,并在目录下建DOCKERFILE文件,进行docker build。不要直接在jenkins的workspace里进行docker build,每次重新构建会被清空。当然也可以把dockerfile放在gitlab,build的时候用链接来调用。
shell脚本具体说明如下
cd /app/dockerfile #重新选择jenkins服务器上的某一个目录,DOCKERFILE放到此目录下
echo `目录已变更`
rm -rf bbs-5.7.war #删除原有的war包
cp /var/lib/jenkins/workspace/maven_t3_docker_image_from_registry/target/bbs-5.7.war ./
#将jenkins workspace下生成的新war包,拷贝到/app/dockerfile下
echo "war包拷贝完成"
docker rmi 192.168.1.145:5000/cuanon-tomcat:VW # 删除现有的docker镜像
echo "删除现有镜像"
docker build -t 192.168.1.145:5000/cuanon-tomcat:VW . #docker build生成新的镜像
echo "编译完成"
docker push 192.168.1.145:5000/cuanon-tomcat:VW #上传到本地私有仓库
echo "推送私有仓库完成"
DOCKERFILE也比较简单,利用现成的tomcat镜像,只是把war包拷贝进来。
[root@jenkins01 dockerfile]# pwd
/app/dockerfile
[root@jenkins01 dockerfile]# cat Dockerfile
FROM 192.168.1.145:5000/cuanon-tomcat:V1.1 #现有的tomcat 镜像
copy bbs-5.7.war /usr/local/tomcat/webapps #将当前目录下war包拷贝到镜像内
[root@jenkins01 dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.1.145:5000/cuanon-tomcat VW cd5aa4030708 38 hours ago 314MB
192.168.1.145:5000/cuanon-tomcat b6b095f3fa24 38 hours ago 314MB
192.168.1.145:5000/cuanon-tomcat 818682237ede 38 hours ago 314MB
192.168.1.145:5000/cuanon-tomcat d9725673ec38 38 hours ago 314MB
192.168.1.145:5000/cuanon-tomcat V1.1 c4d75b3cb23c 2 weeks ago 223MB
registry latest 2e200967d166 4 weeks ago 24.2MB
5.增加“构建后 *** 作”
指定对应的web服务器,在脚本执行中增加如下脚本,删除容器及镜像,拉取最新的镜像并运行。
shell脚本说明如下
docker rm -f cuanon-bbs-vw && #删除服务器上正在运行的web容器
echo "删除容器完成"
docker rmi 192.168.1.145:5000/cuanon-tomcat:VW && #删除原先的镜像,也可以不删除,拉取的时候会自动覆盖。
echo "删除image完成"
docker pull 192.168.1.145:5000/cuanon-tomcat:VW && #从私有仓库拉取最新的镜像
echo "下载image完成"
docker run -d -p 1111:8080 --name cuanon-bbs-vw 192.168.1.145:5000/cuanon-tomcat:VW #启动新的容器
echo "启动容器完成"
6.构建任务
运行成功会有如下输出
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving /var/lib/jenkins/workspace/maven_t3_docker_image_from_registry/pom.xml to bbs/bbs/5.7/bbs-5.7.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/maven_t3_docker_image_from_registry/target/bbs-5.7.war to bbs/bbs/5.7/bbs-5.7.war
[maven_t3_docker_image_from_registry] $ /bin/sh -xe /tmp/jenkins8778853077367120664.sh
+ cd /app/dockerfile
++ 目录已变更
/tmp/jenkins8778853077367120664.sh: line 3: 目录已变更: command not found
channel stopped
+ echo
+ rm -rf bbs-5.7.war
+ cp /var/lib/jenkins/workspace/maven_t3_docker_image_from_registry/target/bbs-5.7.war ./
+ echo war包拷贝完成
war包拷贝完成
+ docker rmi 192.168.1.145:5000/cuanon-tomcat:VW
Untagged: 192.168.1.145:5000/cuanon-tomcat:VW
Untagged: 192.168.1.145:5000/cuanon-tomcat@sha256:af67f949994f4d0f573401ae51e4c3ceb06ee94faa46de0b92f78e5c597f6d8b
Deleted: sha256:cd5aa4030708d377615a9df8237573fd3ab73ee2172af35f7f737b833eb58fc7
Deleted: sha256:e8e141c364c979db3071ef82961051ec2a02a015d9610b88b7430843c0e29899
+ echo 删除现有镜像
删除现有镜像
+ docker build -t 192.168.1.145:5000/cuanon-tomcat:VW .
Sending build context to Docker daemon 90.39MB
Step 1/2 : FROM 192.168.1.145:5000/cuanon-tomcat:V1.1
---> c4d75b3cb23c
Step 2/2 : copy bbs-5.7.war /usr/local/tomcat/webapps
---> 594e976939f6
Successfully built 594e976939f6
Successfully tagged 192.168.1.145:5000/cuanon-tomcat:VW
+ echo 编译完成
编译完成
+ docker push 192.168.1.145:5000/cuanon-tomcat:VW
The push refers to repository [192.168.1.145:5000/cuanon-tomcat]
e0eede822835: Preparing
dff3d8fca213: Preparing
adfe581a0f2f: Preparing
2d83a4506e1a: Preparing
f8019f2af4d9: Preparing
d5a59477c4bd: Preparing
0d17b0f92d87: Preparing
b4cbb328f729: Preparing
366ad773e9a4: Preparing
963ed4f795e4: Preparing
55004fc58b84: Preparing
09634cbb6441: Preparing
8b15606a9e3e: Preparing
b4cbb328f729: Waiting
366ad773e9a4: Waiting
963ed4f795e4: Waiting
55004fc58b84: Waiting
09634cbb6441: Waiting
8b15606a9e3e: Waiting
d5a59477c4bd: Waiting
0d17b0f92d87: Waiting
f8019f2af4d9: Layer already exists
adfe581a0f2f: Layer already exists
dff3d8fca213: Layer already exists
2d83a4506e1a: Layer already exists
0d17b0f92d87: Layer already exists
d5a59477c4bd: Layer already exists
366ad773e9a4: Layer already exists
963ed4f795e4: Layer already exists
b4cbb328f729: Layer already exists
09634cbb6441: Layer already exists
55004fc58b84: Layer already exists
8b15606a9e3e: Layer already exists
e0eede822835: Pushed
VW: digest: sha256:457271f6fb730a99e4dd2de846fef26dacbd0cd96dc23d1fea0d3b32eee86107 size: 3038
+ echo 推送私有仓库完成
推送私有仓库完成
SSH: Connecting from host [jenkins01]
SSH: Connecting with configuration [dockerserver01] ...
SSH: EXEC: completed after 13,210 ms
SSH: Disconnecting configuration [dockerserver01] ...
SSH: Transferred 0 file(s)
Finished: SUCCESS
7.查看服务器端的docker运行情况
会看到新的容器产生,验证下网页访问即可。
[root@dockerserver01 target]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5480f2a1ae88 192.168.1.145:5000/cuanon-tomcat:VW "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:1111->8080/tcp, :::1111->8080/tcp cuanon-bbs-vw
bfd3e5ae3de8 cuanon-bbs:v1 "catalina.sh run" 40 hours ago Up 40 hours 0.0.0.0:7777->8080/tcp, :::7777->8080/tcp cuanon-bbs-web
ba8d943788cc bingozhou/mysql5.7 "docker-entrypoint.s…" 2 weeks ago Up 5 days 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql-docker5.7
75b764fe892f tomcat:8.0.53-jre8-slim "catalina.sh run" 2 weeks ago Up 5 days 0.0.0.0:9999->8080/tcp, :::9999->8080/tcp tomcat-java8-bbs
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)