Jenkins自动化部署实例讲解
文章目录
- 前言
- 实例讲解
- 基本环境
- 全局工具配置
- 创建任务
- 任务配置
- 源码管理
- 构建步骤(Build Steps)
- 第一步:调用Maven
- 第二步:执行shell启动容器
- 后记
前言
你平常在做自己的项目时,是否有过部署项目太麻烦的想法?如果你是单体项目,可能没什么感触,但如果你是微服务项目,相信你应该是有过这种感触的。
这种情况下,我一般会劝你了解一下Jenkins这个玩意。怎么了解呢?我会建议你阅读本文🤡。
本文分为一个简单的Jenkins自动化构建部署实例讲解,如果你还没有安装这个玩意,可以先阅读我的另一篇文章:Linux下的Jenkins安装教程_阿杆.,它会教你如何在Linux上安装Jenkins。
实例讲解
接下来,我会拿出我的用户微服务构建任务的实际配置来向你进行解读,当你了解了Jenkins自动化构建部署的工作原理后,你便可以很快的上手这个玩意,因为你会发现它是如此的简单。
此实例是基于我的开源项目校园博客的Jenkins部分进行讲解的,开源地址:stick-i/scblogs: 🎉校园博客,基于微服务架构且前后端分离的博客社区系统。项目后端技术栈:SpringBoot + SpringCloud + Mybatis-Plus + Nacos + MySQL + Redis + MQ + ElasticSearch + Docker。前端主要是基于Vue2和ElementUI进行开发的。 (github.com)
基本环境
在此之前,我需要介绍一下我的基本环境:
-
我的操作环境为Windows,但是我要把微服务部署到一台Linux服务器上去,包括Jenkins也是安装在这个上面的。
-
服务器上安装了Jenkins、Git、Docker、JDK、Maven、NodeJs,都是些拿来构建的东西,都是单独安装的,而不是跑在Docker上。
-
而项目服务都是跑在Docker上的,还有Redis这种轻量的中间件也跑在Docker上。
-
我的项目已经在Git仓库里放好了,放github或者gitee或者gitlab都行。
全局工具配置
在Jenkins上,我已经配置好了这些构建工具的路径,以便于Jenkins可以直接调用到他们,在系统管理 -> 全局工具配置
这个页面下,这张图有点长:
在这张图上,你可以看到其中有一部分的配置是有路径的,还有一部分配置是没有路径的,这是因为我把他们的命令路径加到了系统路径上,即使不添加完整路径,Jenkins也可以调用到它们。
创建任务
好,现在我们已经准备好环境了,可以创建一个任务来试试水了,输入任务名称,然后选择构建一个自由风格的软件项目
:
别问我在哪新建任务,请你返回首页好好看看:
任务配置
源码管理
现在我们已经进入到任务配置界面了,往下划到源码管理的地方,选择Git,然后填写仓库地址等信息:
添加Credentials的时候,如果你会使用SSH密钥的话,建议还是用这个,但你得在机器上进行格外的配置,这里我就不多说了,不会的话直接用账号密码也是可以的:
构建步骤(Build Steps)
第一步:调用Maven
点击增加构建步骤,由于我们是Maven管理的项目,需要先使用Maven构建,所以第一步就用调用顶层Maven目标
:
选择maven版本,然后target根据项目的实际情况编写,我的命令是这样的:
- 先构建jar包,执行install的过程中会先执行package的,所以我直接install。我的项目中单元测试是没怎么梳理的,所以我使用参数
-Dmaven.test.skip=true
跳过单元测试。 - 然后我得打包成docker镜像,我使用的是
dockerfile-maven-plugin
这个Maven插件,所以打包docker镜像的步骤就也放在maven里面了,构建docker镜像的信息都在项目的pom文件里面。
install -Dmaven.test.skip=true
dockerfile:build -f user-service/user-server/pom.xml
构建完镜像了,接下来我们直接使用这个镜像创建容器然后运行就完事了。
第二步:执行shell启动容器
再添加一个构建步骤,正常情况下我们调用docker通过命令行调用就可以了,所以我们现在也添加一个执行shell
的步骤即可。
具体的命令也很简单,就这么几步:
- 清理之前的旧镜像。由于我们刚刚构建了一个新的镜像,新镜像和旧镜像的名称和版本我们是没有改的,所以旧的镜像就会自动变成
<none>
,使用命令docker image prune -f
就可以清理掉这部分镜像。 - 停止旧容器运行并删除旧容器。当然我们得先判断一下是否存在旧容器,使用容器名称来进行判断,这部分指令涉及到
shell
和docker
的命令知识,看不懂没关系,可以直接cv,注意修改容器名称就好。 - 调用docker启动容器,根据项目实际情况来设定不同的参数,我这里设置了网络模式为host,并且映射了一个容器卷,用于读取nacos的地址,再指定容器名称为
user-service
,最后指定使用的镜像名称。
大功告成!完整命令如下:
# 清理镜像
docker image prune -f # 清理容器
if [ -n "$(docker ps -a -f name=user-service --format '{{.ID}}' )" ] then#停止容器运行docker stop $(docker ps -a -f name=user-service --format '{{.ID}}' )#删除之前的容器docker rm $(docker ps -a -f name=user-service --format '{{.ID}}' )
fi# 启动容器
docker run -d --net=host -v scblogs-config:/config -e PARAMS="$params" --name user-service scblogs/user-server
最后别忘了点击保存!
后记
经过上面这些步骤,我们完成了一个基本的自动化构建脚本,这个脚本会调用maven把我的项目打包,然后构建成一个docker镜像,再通过一段shell命令去启动这个程序。
如果你想尝试启动这个构建任务的话,你可以回到主页点击右边的绿色符号。
当然,你大概率是会构建失败的😯。因为我的这份实例讲解并没有完全的讲清楚,甚至里面有很多步骤你都看不懂,是不是?
其实我并没有想写一份手把手的Jenkins使用教程,因为这要写的内容实在是太多了!
还记得我在实例讲解的最开始写的吗?写这个构建案例的目的是让你了解Jenkins自动化构建的原理,如果你看到这里已经发现了,这自动化构建,其实就跟我们手动构建部署差不多!只不过是把手动操作的东西设定成了脚本,那你就已经有能力去自己摸索它了。
用用插件、写写脚本,就可以搞定自己项目的自动化部署啦。
实际情况是,我有一台服务器专门用于Jenkins自动化部署,还有一台服务器专门用于生产环境,这两台服务器都可以连接到外网,也可以互相访问到彼此。这是由于Jenkins构建时是会比较吃CPU的,为了不影响生产环境,所以我把它们分开了。当然,这种情况下,脚本也会稍微复杂一点,具体流程大概是下面这样的:
如果你对我的项目感兴趣,欢迎访问项目的GitHub地址:stick-i/scblogs: 🎉校园博客,基于微服务架构且前后端分离的博客社区系统。项目后端技术栈:SpringBoot + SpringCloud + Mybatis-Plus + Nacos + MySQL + Redis + MQ + ElasticSearch + Docker。前端主要是基于Vue2和ElementUI进行开发的。 (github.com)
都看到这里了,各位靓仔、靓妹,请帮我点一个赞吧!
相关文章:

Jenkins自动化部署实例讲解
文章目录 前言实例讲解基本环境全局工具配置创建任务任务配置源码管理构建步骤(Build Steps)第一步:调用Maven第二步:执行shell启动容器 后记 前言 你平常在做自己的项目时,是否有过部署项目太麻烦的想法?…...

RK356X 解除UVC摄像头预览分辨率1080P限制
平台 RK3566 Android 11 概述 UVC: USB video class(又称为USB video device class or UVC)就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头、数字摄影机、模拟视频转换器、电视卡及静态视频相机…...

English Learning - L2-14 英音地道语音语调 重音技巧 2023.04.10 周一
English Learning - L2-14 英音地道语音语调 重音技巧 2023.04.10 周一 课前热身重音日常表达节奏单词全部重读的句子间隔时间非重读单词代词和缩约词助动词声临其境语调预习 课前热身 学习目标 重音 重弱突出,重音突出核心表达的意思 重音是落在重读单词上&…...

3.6 n维随机变量
学习目标: 学习n维随机变量需要掌握一定的数学知识,包括多元微积分、线性代数和概率论等。要学习n维随机变量,我会采取以下步骤: 复习相关的数学知识:首先,我会复习多元微积分、线性代数和概率论的基本知…...

JavaSE学习进阶day06_02 Set集合和Set接口
第二章 Set系列集合和Set接口 Set集合概述:前面学习了Collection集合下的List集合,现在继续学习它的另一个分支,Set集合。 set系列集合的特点: Set接口: java.util.Set接口和java.util.List接口一样,同样…...

基于matlab分析卫星星座对通信链路的干扰
一、前言 此示例说明如何分析从中地球轨道 (MEO) 中的卫星星座到位于太平洋的地面站的下行链路上的干扰。干扰星座由低地球轨道(LEO)的40颗卫星组成。此示例确定下行链路闭合的时间、载波噪声加干扰比以及链路裕量。 此示例需要卫…...

Python中的异常——概述和基本语法
Python中的异常——概述和基本语法 摘要:Python中的异常是指在程序运行时发生的错误情况,包括但不限于除数为0、访问未定义变量、数据类型错误等。异常处理机制是Python提供的一种解决这些错误的方法,我们可以使用try/except语句来捕获异常并…...

Tomcat 部署与优化
1. Tomcat概述 Tomcat是Java语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人 共同开发而成。Tomcat属于轻量级应用服务器,在…...

多模态之论文笔记ViLT
文章目录 ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision一. 简介1.1 摘要1.2 文本编码器,图像编码器,特征交互复杂度分析1.2 特征交互方式分析1.3 图像特征提取分析 二. 方法 Vision-and-Language Transformer2.1.方…...

微服务架构下认证和鉴权理解
认证和鉴权 从单体应用到微服务架构,优势很多,但是并不是代表着就没有一点缺点了。 微服务架构,意味着每个服务都是松散耦合的。因此,作为软件工程师和架构师,我们在分布式架构中面临着安全挑战。微服务对外开放的端…...

Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应(The Beauty of Qt Network Programming: Exploring URL, HTTP, Service Discovery, and Request-Response 引言(Introduction)QUrl 类:构建和解析 URL(…...

毕业2年,跳槽到下一个公司就25K了,厉害了···
本人本科就读于某普通院校,毕业后通过同学的原因加入软件测试这个行业,角色也从测试小白到了目前的资深工程师,从功能测试转变为测试开发,并顺利拿下了某二线城市互联网企业的Offer,年薪 30W 。 选择和努力哪个重要&a…...

设计模式 -- 适配器模式
前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…...

STM32之增量式编码器电机测速
STM32之增量式编码器电机测速 编码器编码器种类按监测原理分类光电编码器霍尔编码器 按输出信号分类增量式编码器绝对式编码器 编码器参数分辨率精度最大响应频率信号输出形式 编码器倍频 STM32的编码器模式编码器模式编码器的计数方向仅在TI1计数电机正转,向上计数…...

一图看懂 xlsxwriter 模块:用于创建 Excel .xlsx 文件, 资料整理+笔记(大全)
本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 xlsxwriter 模块:用于创建 Excel .xlsx 文件, 资料整理笔记(大全) 摘要模块图类关系图模块全展开【xlsxwriter】统计常量模块1 xlsxwrit…...

【社区图书馆】NVMe协议的命令
声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 命令由host提交到内存中的SQ队列中,更新TDBxSQ后,NVMe控制器通过DMA的方式将SQ中的命令(怎么取,如何取,取多少,因设计而异)取到控制器缓冲区…...

Nginx网站服务
Nginx概述 Nginx 是开源、高性能、高可靠、低资源消耗的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。对HTTP并发…...

第八篇 Spring 集成JdbcTemplate
《Spring》篇章整体栏目 ————————————————————————————— 【第一章】spring 概念与体系结构 【第二章】spring IoC 的工作原理 【第三章】spring IOC与Bean环境搭建与应用 【第四章】spring bean定义 【第五章】Spring 集合注入、作用域 【第六章】…...

双塔模型:微软DSSM模型浅析
1.背景 DSSM是Deep Structured Semantic Model (深层结构语义模型) 的缩写,即我们通常说的基于深度网络的语义模型,其核心思想是将query和doc映射到到共同维度的语义空间中,通过最大化query和doc语义向量之间的余弦相似度,从而训…...

DAY 44 Apache网页优化
Apache网页优化 概述 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代 为了适应企业需求,就需要考虑如何提升Apach…...

移动端手机网页适配iPad与折叠屏设备
采用的网页适配方案:移动端页面px布局适配方案(viewport) 产生此问题的原因 由于手机与平板等设备宽高比差异导致页面展示不全或者功能按钮展示在视口之外点击不到。 简单来说就是我们的页面都是瘦长(即高大于宽)的,而折叠屏等设…...

深入剖析 Qt QMap:原理、应用与技巧
目录标题 引言:QMap 的重要性与基本概念QMap 简介:基本使用方法(QMap Basics: Concepts and Usage)QMap 迭代器:遍历与操作键值对(QMap Iterators: Traversing and Manipulating Key-Value Pairs࿰…...

SpringBoot使用Hbase
SpringBoot使用Hbase 文章目录 SpringBoot使用Hbase一,引入依赖二,配置文件添加自己的属性三,配置类注入HBASE配置四,配置Hbase连接池五,配置操作服务类 一,引入依赖 <dependency><groupId>org…...

SQL优化总结
SQL优化总结 1. MySQL层优化五个原则2. SQL优化策略2.1 避免不走索引的场景 3. SELECT语句其他优化3.1 避免出现select *3.2 避免出现不确定结果的函数3.3 多表关联查询时,小表在前,大表在后。3.4 使用表的别名3.5 调整Where字句中的连接顺序 附录 1. My…...

【python学习】基础篇-字典的基本操作 获取当前日期时间
1.字典的定义与创建 定义字典时,每个元素都包含两个部分“键”和“值”,在“键”和“值”之间使用冒号(:)分隔,相邻两个元素使用逗号分隔,所有元素放在一个大括号“{}”中。语法格式如下: dictionary (‘key1’:‘value1’, &quo…...

Python FreeCAD.Vector方法代码示例
Python FreeCAD.Vector方法代码示例 本文整理汇总了Python中FreeCAD.Vector方法的典型用法代码示例。如果您正苦于以下问题:Python FreeCAD.Vector方法的具体用法?Python FreeCAD.Vector怎么用?Python FreeCAD.Vector使用的例子?那…...

HDFS 梳理
HDFS客户端 客户端作用 管理文件目录文件系统操作读写 客户端生成 配置项 配置 客户端状态 缓冲相关参数,读写缓冲 失败切换操作 推测执行?? NN引用 NNProxy 客户端关闭 关闭IO流 修改状态 关闭RPC连接 是否有多个RPC连接? HDFS读 打开文件构…...

ChatGPT团队中,3个清华学霸,1个北大学霸,共9位华人
众所周知,美国硅谷其实有着众多的华人,哪怕是芯片领域,华为也有着一席之地,比如AMD 的 CEO 苏姿丰、Nvidia 的 CEO 黄仁勋 都是华人。 还有更多的美国著名的科技企业中,都有着华人的身影,这些华人ÿ…...

通过工具生成指定 类型 大小 文件
今天给大家介绍一个神器 首先 大家在开发过程中或许经常需要涉及到文件上传类的功能 需要测试文件过大 空文件等等清空 不同大小的文件 而这种文件大小是比较不好控制的 但大家可以下载我的资源 文件生成工具(可生成指定大小 类型文件) 下载下来里面就有一个 fileGeneration…...

超外差收音机的制作-电子线路课程设计-实验课
超外差收音机的制作 一、原理部分: 超外差收音机:超外差式收音机是将接收到的不同频率的高频信号全部变成一个固定的中频信号进行放大,因而电路对各种电台信号的放大量基本是相同的,这样可以使中放电路具有优良的频率特性。 超…...