jenkins+maven+docker java项目编译、打包、构建镜像、上传私有仓库、web容器部署
本环境非常简单,主要实现如下流程功能
员工通过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 <none> b6b095f3fa24 38 hours ago 314MB
192.168.1.145:5000/cuanon-tomcat <none> 818682237ede 38 hours ago 314MB
192.168.1.145:5000/cuanon-tomcat <none> 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.39MBStep 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
jenkins+maven+docker java项目编译、打包、构建镜像、上传私有仓库、web容器部署相关推荐
- Docket学习2《docker安装nginx、安装tomcat、安装Centos7、容器导入导出、镜像上传到仓库》
上一篇:Docker学习1<环境准备.原理.常用命令> 目录 一.安装nginx镜像 1.获取nginx的版本 2.下载nginx 3.运行nginx 4.开放端口 5.测试 6.端口暴露 ...
- JAVA项目中如何实现图片上传?
JAVA项目中实现图片上传 **前端div** <div class="layui-form-item"><label class="layui-for ...
- docker<应用分享>--本地镜像上传dockerhub、从dockerhub拉取镜像
目录 注册账号并登录 上传镜像(push) 拉取镜像 注册账号并登录 首先在docker hub注册账号 docker hub地址:docker hub 服务器输入docker login,输入账号密 ...
- 利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(三)(网内首发超详细版)...
3.3 权限配置样例 注意: * 权限配置文件中出现的用户名必须已在用户配置文件中定义. * 对权限配置文件的修改立即生效,不必重启svn. 用户组格式: [groups] = , 其中,1个用户组可 ...
- Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成
最近配置了Jenkins服务器,记录下基本过程.(当然还遇到了若干小问题,兵来将挡水来土掩就是了) Jenkins安装 安装Tomcat 从Jenkins官网下载jenkins.war文件.官网地址: ...
- 云效(原RDC)如何构建一个基于Maven的Java项目
最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会分成5个 ...
- Docker java项目发布/开发环境搭建
Docker java项目发布/开发环境搭建 线上部署项目/开发环境搭建命令大全 关闭windows10 指定应用 安装Docker 安装 docker-compose 关于docker容器导致硬盘耗 ...
- Maven多模块项目编译失败:程序包xxx不存在
Maven多模块项目编译失败:程序包xxx不存在 项目结构如下: parent(父类工程) | - - - - - common(通用工具类子工程) | - - - - - projectA(spri ...
- 如何直接用maven创建java项目,不用eclipse,不用idea,不用任何ide
不用eclipse,不用idea,不用任何ide,如何直接用maven创建java项目 写作背景 maven简介 安装maven 配置镜像与本地仓库 更改镜像下载地址 更改本地仓库 配置环境变量 建立 ...
最新文章
- 黄聪:C# MP3操作类,能播放指定的mp3文件,或播放嵌入的资源中的Mp3文件
- 将十进制数转化成二进制数,计算其中1的个数
- 关于Asp.net页面的刷新
- c++怎么输入esc_绘制CAD图纸的过程中CAD快捷键失灵了怎么办?
- Bit-Z全球生态联盟暨韩国战略发布会即将开启
- python 中的static-method (静态函数), classmethod(类函数 ), 成员函数
- python读取excel写入mysql pandas_python pandas 读取文件 写入文件excel
- 接口的定义与实现(重要)
- Linux该如何学习(新手入门必看)
- LeetCode简单题目(#160 #167 #168 #169 #171)-5道(序列、数字)
- RBG-D深度相机的相关资料
- 大学计算机考核方案,课程实验考核方案
- 大业达公司裁员风云2
- 图的表现形式第一篇(Java实现)
- Elasticsearch 7.10 之 Indexing pressure
- Flink(60):Flink中通用ModelUtil工具类
- 《JavaScript高级编程》HTML中的JavaScript
- vivo便签批量导出为excel/记事本/word
- 单项选择的php代码,php单项选择提交,该如何处理
- 基于遗传算法的物流企业运输成本优化MATLAB仿真,考虑运输时间约束
热门文章
- 将电脑本地视频转成rtsp和rtmp视频流
- PHP面试技巧——如何克服面试中紧张的情绪?
- JavaScript实现无缝轮播图效果
- JNLP说明(good)
- 使用HTML5和CSS3实现运动,九.HTML5和CSS3提高
- 理解tfrecord读取数据——错误OutOfRangeError (see above for traceback)的解决
- Owndoor开门应用APP安卓苹果
- 分析计算机网络流量控制论文,线性规划控制论文,关于线性规划的网络流量流向控制技术相关参考文献资料-免费论文范文...
- Python学习-假人和配对
- python爬取qq好友_利用Python爬取QQ好友空间数据