本环境非常简单,主要实现如下流程功能

员工通过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容器部署相关推荐

  1. Docket学习2《docker安装nginx、安装tomcat、安装Centos7、容器导入导出、镜像上传到仓库》

    上一篇:Docker学习1<环境准备.原理.常用命令> 目录 一.安装nginx镜像 1.获取nginx的版本 2.下载nginx 3.运行nginx 4.开放端口 5.测试 6.端口暴露 ...

  2. JAVA项目中如何实现图片上传?

    JAVA项目中实现图片上传 **前端div** <div class="layui-form-item"><label class="layui-for ...

  3. docker<应用分享>--本地镜像上传dockerhub、从dockerhub拉取镜像

    目录 注册账号并登录 上传镜像(push) 拉取镜像 注册账号并登录 首先在docker hub注册账号 docker hub地址:docker hub 服务器输入docker login,输入账号密 ...

  4. 利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(三)(网内首发超详细版)...

    3.3 权限配置样例 注意: * 权限配置文件中出现的用户名必须已在用户配置文件中定义. * 对权限配置文件的修改立即生效,不必重启svn. 用户组格式: [groups] = , 其中,1个用户组可 ...

  5. Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成

    最近配置了Jenkins服务器,记录下基本过程.(当然还遇到了若干小问题,兵来将挡水来土掩就是了) Jenkins安装 安装Tomcat 从Jenkins官网下载jenkins.war文件.官网地址: ...

  6. 云效(原RDC)如何构建一个基于Maven的Java项目

    最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会分成5个 ...

  7. Docker java项目发布/开发环境搭建

    Docker java项目发布/开发环境搭建 线上部署项目/开发环境搭建命令大全 关闭windows10 指定应用 安装Docker 安装 docker-compose 关于docker容器导致硬盘耗 ...

  8. Maven多模块项目编译失败:程序包xxx不存在

    Maven多模块项目编译失败:程序包xxx不存在 项目结构如下: parent(父类工程) | - - - - - common(通用工具类子工程) | - - - - - projectA(spri ...

  9. 如何直接用maven创建java项目,不用eclipse,不用idea,不用任何ide

    不用eclipse,不用idea,不用任何ide,如何直接用maven创建java项目 写作背景 maven简介 安装maven 配置镜像与本地仓库 更改镜像下载地址 更改本地仓库 配置环境变量 建立 ...

最新文章

  1. 黄聪:C# MP3操作类,能播放指定的mp3文件,或播放嵌入的资源中的Mp3文件
  2. 将十进制数转化成二进制数,计算其中1的个数
  3. 关于Asp.net页面的刷新
  4. c++怎么输入esc_绘制CAD图纸的过程中CAD快捷键失灵了怎么办?
  5. Bit-Z全球生态联盟暨韩国战略发布会即将开启
  6. python 中的static-method (静态函数), classmethod(类函数 ), 成员函数
  7. python读取excel写入mysql pandas_python pandas 读取文件 写入文件excel
  8. 接口的定义与实现(重要)
  9. Linux该如何学习(新手入门必看)
  10. LeetCode简单题目(#160 #167 #168 #169 #171)-5道(序列、数字)
  11. RBG-D深度相机的相关资料
  12. 大学计算机考核方案,课程实验考核方案
  13. 大业达公司裁员风云2
  14. 图的表现形式第一篇(Java实现)
  15. Elasticsearch 7.10 之 Indexing pressure
  16. Flink(60):Flink中通用ModelUtil工具类
  17. 《JavaScript高级编程》HTML中的JavaScript
  18. vivo便签批量导出为excel/记事本/word
  19. 单项选择的php代码,php单项选择提交,该如何处理
  20. 基于遗传算法的物流企业运输成本优化MATLAB仿真,考虑运输时间约束

热门文章

  1. 将电脑本地视频转成rtsp和rtmp视频流
  2. PHP面试技巧——如何克服面试中紧张的情绪?
  3. JavaScript实现无缝轮播图效果
  4. JNLP说明(good)
  5. 使用HTML5和CSS3实现运动,九.HTML5和CSS3提高
  6. 理解tfrecord读取数据——错误OutOfRangeError (see above for traceback)的解决
  7. Owndoor开门应用APP安卓苹果
  8. 分析计算机网络流量控制论文,线性规划控制论文,关于线性规划的网络流量流向控制技术相关参考文献资料-免费论文范文...
  9. Python学习-假人和配对
  10. python爬取qq好友_利用Python爬取QQ好友空间数据