docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像

一、前言

1、本文主要内容

将在项目中实际使用到的相关东西整理记录一波,同时可以方便其他同学在使用到的时候参考一下(自己也备忘),有不对的地方,欢迎指出~~

  • Docker部署SpringBoot 项目通用Dockerfile文件、脚本
  • Jenkins新建任务图文详解

3、本文环境信息

  • 服务器

    操作系统硬件配置IP说明
    CentOS 74C16G10.133.28.54部署Jenkins
  • Jenkins版本

    Jenkins安装包有两种,一种是LTS,一种是Weekly。LTS是稳定版,Weekly每周会更新一次,一般使用LTS就行了,最新版的LTS:2.235.2

  • Docker

    Docker Engine - Community : 19.03.8

  • Spring Boot应用

    使用的是版本2.2.5.RELEASE,当然只要是一个Spring Boot应用都可以

  • GitLab

    本文演示使用的是社区版12.7.6   也可以使用GitHub 、Gitee或者SVN都可以

二、准备工作

1、Docker 环境安装

在Linux服务器上安装Docker环境,具体可以参考:Docker | 在CentOS上安装Docker Engine

2、Jenkins 环境安装

在Linux服务器上安装Jenkins,具体可以参考:CentOS下使用Docker安装Jenkins及配置详细教程

3、GitLab 环境安装

在Linux服务器上安装GitLab,具体可以参考:GitLab持续集成发布之一:CentOS7下GitLab安装部署教程

三、打包及部署

一般微服务项目都会有很多个服务,本文以cloud-gateway 微服务的网关module为例来演示

1、打镜像Dockerfile及运行脚本

目前微服务盛行,既然是微服务,大部分都会采用Docker容器部署,这样可以非常快捷的扩容,所以本文也会从打镜像,镜像启动,镜像推送等方面详细的介绍下。

  • 通用版Dockerfile

FROM java:8# 以下4行配置可以去掉,在此展示下,只因项目中与SAP采用Jco3直连的方式,相对应的项目部署环境也需要配置JCO3的环境,ADD libsapjco3.so /home/sap/libsapjco3.soADD sapjco3.jar /home/sap/sapjco3.jarENV LD_LIBRARY_PATH /home/sapENV CLASSPATH $CLASSPATH:$LD_LIBRARY_PATH/sapjco3.jarADD cloud-gateway-1.1.0-SNAPSHOT.jar /app.jarEXPOSE 8001ENTRYPOINT ["java", "-jar","/app.jar"]

生产环境,可以根据需求在ENTRYPOINT命令行中增加JVM相对应参数的设置

  • 执行脚本

    测试环境一般情况下,都是在一台服务器,启动多个Docker容器,此处将spring.profile.active参数提取出来了,可以做到真正的一包多环境使用,可以参考以下脚本:

#!/usr/bin/env bashgroup_name='mva-cloud'app_name='cloud-gateway'app_version='1.1.0-SNAPSHOT'profile_active='test'echo '----copy jar----'# 停止容器docker stop ${app_name}echo '----stop container----'# 删除容器docker rm ${app_name}echo '----rm container----'# 删除镜像docker rmi ${group_name}/${app_name}:${app_version}echo '----rm image----'# 构建新版镜像docker build -t ${group_name}/${app_name}:${app_version} .echo '----build image----'# 启动Docker镜像docker run -p 9527:9527 --name ${app_name} \-e 'spring.profiles.active'='prod' \-e TZ="Asia/Shanghai" \-v /etc/localtime:/etc/localtime \-v /home/zkgc/mydata/cloud/${app_name}/logs:/home/zkgc/logs/${app_name} \-d ${group_name}/${app_name}:${app_version}echo '----start container----'

生产环境,一般情况下都需要将打好的镜像推送到docker私有仓库中,所以说每一版都需要有版本号的变化,可以考虑使用时间戳动态版本号,docker私有仓库相关介绍可以参考:Docker | 在CentOS上搭建Docker私有仓库Registry-v2

  • Dockerfile、运行脚本run.sh放到服务器的/home/cloud/test-deploy/cloud-gateway目录,后续通过Jenkins打包的Jar 文件也需要拷贝到该目录,如果需要配置SAP的环境,那对应的jar、so文件都需要拷贝到这一个目录,这样在打镜像的时候,就会把相对应的环境打到镜像里面。

2、Jenkins创建任务

  • 新建一个自由风格的任务

    94197ae27eb1adceb57e2805b899d046.png
  • 配置源码管理

    我这边使用的是GitLab,当然你们使用Github、Gitee都是可以的。

    faf7fda5f5c480b90ace823aa298894f.png

    增加一个访问GitLab的用户名密码

    ffd68541ca39caf6a29ed134e50cb60c.png
  • 配置构建

    在构建这个模块下呢,我们主要配置使用Mavenn来进行打包、配置通过SSH执行命令并传输文件等

    想发版的时候,点一下立即构建,Jenkins就会自动从代码仓库拉取最新代码,进行打包,打镜像,启动镜像一键完成了。

    另外,前台代码也是可以通过Jenkins来进行一键打包部署的,与后台的稍微有些不同,后续我会单独写一篇文章,来演示下如何进行前台代码的一键打包部署,前台代码使用的是VUE进行演示。

    • 先打包使用到的通用module。点击增加构建步骤-->调用顶层Maven目标

      27b716faadffb3ba98538de521b361ce.png

      说明下:我这个演示项目已经把一些通用的东西抽取出来了,而gateway 是依赖这些通用的module,所以我这会先将这些通用的进行打包,防止在打包gateway的时候,找不到对应的jar包

    • 配置打包cloud-gateway,点击增加构建步骤-->调用顶层Maven目标,具体配置项参考下图:

      90918b63d78b61f7d36133ed3d667cd7.png
    • 配置执行上面准备好的脚本。点击增加构建步骤-->Send files or execute commands over SSH选项,这个是将打完包的jar包拷贝到指定服务器的指定目录,完成后执行相对应的脚本,具体如下图:

      c71ac4eba026ef4253e25afefeeca0cb.png

      这个地方,需要提前配置好服务器的凭证信息(在公众号的其他文章有教程,可以翻一下),服务器需要开启ssh访问,我这里是Jenkins与测试服务器不在一起,如果在一起的话,就可以选择只运行脚本命令的那个构建选项即可。

    • 点击保存,这样一个任务就创建完成了。

      773d5fdbe3122e1c4d9873c9629a01ae.png

      觉得有用就顺手转发、点赞、在看三连走一波,非常感谢!

      长按/扫码关注我吧,会找到你想要的……7737b56f5e3406c1f32fafa43dcf931f.png 

      8af707c061eca556f6e07f42ea93f5b3.png

         喜欢就点个在看吧da8e77604fa1d9d1b701ff4f5c89a247.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 发送短信 广播 demo,向Android模拟器打电话发短信的简单方法

在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应。譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试。这里介绍一种简单的向android模拟器打电话发短…

android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究

在android中,常常会和输入法的软件键盘交互。在Manifest文件中,系统给activity的一个属性-windowSoftInputMode来控制输入法的显示方式。该属性提供了Activity的window与软键盘的window交互的方式。这里的属性设置有双方面的影响:1.软键盘的显…

天才基本法_《天才基本法》强推!年度神仙小说,看完这本书我竟然爱上了数学...

《天才基本法》——长洱小说文案元宝的书评这个真的是本年度的神仙小说,讲述了女主回到少女时代,可以和他一直暗恋的数学天才重来一遍。女主让男主改变了觉得她碌碌无为的看法,也改变了自己的人生。本书最大的主角其实是数学!天知…

dataTables插件使用

引用文件 <!-- DataTables CSS --> <link rel"stylesheet" type"text/css" href"http://cdn.datatables.net/1.10.7/css/jquery.dataTables.css"><!-- jQuery --> <script type"text/javascript" charset"u…

一行代码,发送邮件

朋友让我给他媳妇儿肚子里的孩子想个名字 走的越来越快了&#xff0c;有天看到一个论点关于说地域会影响人的一辈子。其实想想的确有这个理儿&#xff0c;这使我想起来每天早上挤地铁的时候&#xff0c;其中有一个A站的人总是特别彪悍的往里挤&#xff0c;但B站的人就是永远不会…

js call,apply,bind三个方法的区别

相同点&#xff1a; 都是能够改变this的指向 不同点&#xff1a; 1.call()&#xff1a;传参方式跟bind一样&#xff08;都是以逗号隔开的传参方式&#xff09;&#xff0c;但是跟apply&#xff08;以数组的形式传参&#xff09;不一样&#xff0c; 2.bind(): 此方法应用后的情形…

千年鸿蒙 盼尔来兮是什么意思,鸿蒙是什么意思_鸿蒙的意思和出处_我爱历史网...

鸿蒙&#xff0c;是一个汉语词语&#xff0c;亦作“鸿濛”。中国神话传说的远古时代&#xff0c;传说在盘古开天辟地之前&#xff0c;世界是一团混沌状&#xff0c;因此把那个时代称作鸿蒙时代&#xff0c;后来该词也常被用来泛指远古时代。引证解释亦作“鸿濛”。1、宇宙形成前…

python中调用万年历_python 打印万年历

题目&#xff1a;打印万年历已知条件闰年条件&#xff1a;能被4整除且不能被100整除&#xff0c;或者能被400整除1900年1月1日 是周一解题思路判断闰年;判断当月有多少天;这个月的1号是从周几开始的;格式化打印日历。解题代码#判断年份是否为闰年def is_leap_year(year):if (ye…

求水仙花数

求出所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数本身。 1 /**2 * 题目&#xff1a;打印出所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方…

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

from:http://m.blog.csdn.net/article/details?id51075023 在VS2015中先创建C#项目&#xff0c;然后再创建要编写的动态库DLL项目&#xff0c;这样做的好处是整个解决方案的编程环境是C#模式&#xff0c;这样就可以有很多智能的提示或快捷的编程方式在整个解决方案中都可以使用…

(转)CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景

CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景 我们刚刚分析了《极限跳跃》这款游戏&#xff0c;下面我们开始制作第一个游戏场景&#xff0c;也就是游戏的开始场景。 首先&#xff0c;打开CocosCreator&#xff0c;新建HelloWorld项目。选择项目路径&#xff0…

连接池超时配置_HttpClient连接池的一些思考

前言使用apache的httpclient进行http的交互处理已经很长时间了&#xff0c;而httpclient实例则使用了http连接池&#xff0c;想必大家也没有关心过连接池的管理。事实上&#xff0c;通过分析httpclient源码&#xff0c;发现它很优雅地隐藏了所有的连接池管理细节&#xff0c;开…

android界面布局错位,IOS 浏览器页面布局错位(如:点不到)的分析与解决

IOS 浏览器页面布局错位(如&#xff1a;点不到)的分析与解决IOS 浏览器软键盘的拉起与收缩、微信 IOS 浏览器底部导航条的显示与隐藏&#xff0c;很容易导致页面布局错位(相对窗体的绝对定位元素)&#xff1a;明明按钮在这里&#xff0c;却要在上面一点儿点击屏幕才能点到它明明…

做进度条 根据自己的数据显示进度

做了很多种方法 1&#xff1a; 线程 thread的方法 2&#xff1a; backGroundWorker的方法 3&#xff1a; 自定义线程类 4&#xff1a; 做一个进度条的窗体 通过自定义设置做&#xff08;最方便快捷&#xff09; public partial class waitingProcessbar : Form{public waitin…

视图和模型变换

视图变换&#xff0c;是指变换照相机的位置&#xff0c;角度。 模型变换&#xff0c;是指变换被照物体的位置&#xff0c;角度。 这两个变换&#xff0c;都会影响最终图形中&#xff0c;物体的位置&#xff0c;角度。而这两个变换&#xff0c;可以达到相同的效果。比如&#x…

phoenix的元数据一般存在哪里_Phoenix的一些问题

date: 2020-09-10 13:50:00updated: 2020-09-14 16:30:001. Phoenix索引全局索引&#xff1a;适合读多写少的场景。写数据时因为索引表分布在不同数据节点&#xff0c;跨节点数据传输带来巨大的性能消耗。全局索引必须是查询语句中所有列都包含在全局索引中&#xff0c;它才会生…

鸿蒙os全面升级,华为突然宣布,鸿蒙OS正式版6月底全面升级,幸福来得太突然...

原标题&#xff1a;华为突然宣布&#xff0c;鸿蒙OS正式版6月底全面升级&#xff0c;幸福来得太突然摘要&#xff1a;早在今年2月华为Mate X2折叠屏新品发布会上&#xff0c;余承东曾表示&#xff0c;鸿蒙OS正式版将于今年4月份全面上线。或许是因为华为宣布卖车分散了很多的精…

5-python学习——条件语句

5-python学习——条件语句 5-python学习——条件语句 条件语句if else形式if else条件语句说明 测试一下编程语言一般都由这么几个部分组成 变量条件分支语句循环语句函数这里要说的就是条件分支语句。 python的条件语句和shell脚本的非常像&#xff0c;也就是if else if else这…

eclipse启动失败:An internal error occurred during: reload maven project

2019独角兽企业重金招聘Python工程师标准>>> 1.找到workspace文件夹下的/.metadata文件夹&#xff0c;将其删除掉&#xff0c;然后在讲项目重新导入进去eclipse中。但是这个有一点不好的地方&#xff0c;之前对eclipse所做的配置也会恢复为默认配置 2.在.metadata下…

Quartz2D知识点聚合案例

Quartz2D知识点聚合 基本 //画图片UIImage *image [UIImage imageNamed:"阿狸头像"];[image drawInRect:rect];//字体NSString *title "标题";NSMutableDictionary *atr [NSMutableDictionary dictionary];atr[NSFontAttributeName] [UIFont systemFon…