Jenkins 详解,几分钟学会,自动编译/部署/发布软件

news2024/9/27 5:46:26

大家好,欢迎来到停止重构的频道。

本期我们详细讨论Jenkins。

随着互联网应用越来越多,系统规模也越来越大,DevOps、CI/CD等概念也被重视起来,持续交付/持续集成/自动化部署等理念也被越来越多的团队接受。

而本期介绍的Jenkins,是目前比较流行的用于自动编译/部署软件项目的系统。

我们按这样顺序展开介绍

1、自动发布的好处

2、Jenkins介绍

3、Jenkins安装

4、Jenkins发布流程配置

自动发布的好处

Jenkins可以简单地理解为一个网站系统,当条件触发时Jenkins就会自动按预设任务进行编译部署。​

例如,Git代码仓库创建了新tag标识后,Jenkins可以自动下载代码,并编译发布到运行的服务器。

那么,自动发布有什么好处呢?

一般认为,可以节省人工编译、部署的时间服务器越多,节省的时间也就越多。

那么,是否只有在项目较大、服务器较多的情况下,才需要自动发布呢?服务器少的话,好像手工打包也花不了多少时间。

不过,我们认为无论项目大小、服务器多少,都应该采用自动发布进行编译、部署。包括开发环境、测试环境、生产环境。

因为在实际发布场景下,不仅仅是替换程序、重启服务这么简单。往往还需要人工修改配置、替换某些文件等。一些服务的启动顺序也是有特殊要求的。

而且如果发布测试时发现了问题则发布行为需要循环多次。

如果是人工发布会有很多人为失误,人为失误是很难排查的,经常是以为几分钟半小时就能发布完成,实际上花了1个通宵或者半天。

在我们看来自动发布最大的好处并不是单单节省了多服务器的部署时间,而是免去人工编译、部署时可能发生的人为失误,从而节省无意间浪费的成本。

Jenkins的介绍

接下来是Jenkins介绍,简单地说,Jenkins是一个自动发布部署软件的系统,提供管理网站供用户使用。

在管理网站上,用户可以编排自动发布任务,可以实现代码下载-代码编译-文件发送-执行远程命令等场景。

Jenkins除了自身功能,还支持插件如Maven、npm等插件。在管理网站点击安装这些插件,就能快速满足代码编译所需要的环境。

即使有些编译环境无法通过插件完成搭建,也可以在Jenkins运行的服务器上安装对应软件,通过shell指令执行

发布任务除了在管理网页点击触发,也可以配置远程API触发

如果是使用Git存储代码的话,可以在Git仓库配置Web hook,在执行一些Git操作时,自动触发对应的Jenkins发布任务。

另外Jenkins也支持分布式部署,多个服务器节点会自动抢占任务。

Jenkins安装

关于Jenkins的安装,可以参考官网说明,官网有详细的安装说明。

我们更推荐使用Docker的方式安装Jenkins,关于Docker的使用说明,可以参考往期《Docker详解》。

Docker方式可以快速部署Jenkins,但比这更重要的是Docker可以将Jenkins隔离起来,也方便日后对Jenkins进行服务器迁移

虽然Jenkins的插件基本做好了环境隔离,但是很多时候Jenkins的插件不能百分百满足特定软件的编译要求。

也就需要在服务器上手动安装其他软件,这会变相污染服务器环境,可能会对部署在同一服务器的其他服务造成影响。

Jenkins发布流程配置

接下来介绍Jenkins具体发布任务的配置。

新建发布任务一般采用free style方式。

如果是创建与已有发布任务类似的任务,可以直接在创建任务时填写需要复制的任务名称即可快速克隆任务。

配置具体发布任务一般分为4步下载代码-编译代码-远程部署程序-配置任务自动触发,当然这并不固定,根据实际情况配置即可。

配置:下载代码

第一步下载代码,也就是设置Source Code Management(源码管理)。

Jenkins默认支持Git,如果是SVN等代码库则需要安装额外插件。

值得一提的是,Jenkins默认只支持一个Git仓库的配置,如果需要下载多个Git仓库代码,需要安装Multiple SCMS插件。

下载完这个插件后,源码管理中会出现新的选项(Multiple SCMs),里面可以设置多个Git仓库代码。

下载的代码或者编译生成的文件,可以在运行发布任务后在workspace查看。​

配置:编译代码

第二步编译代码,我们一般是推荐以Shell指令进行编译的

在Jenkins的服务器上安装相关编译环境后,可以通过Shell指令编译软件。

发布任务运行过程中,Jenkins会捕获所有终端log,以方便用户记录、排查错误。

当然,Jenkins官方更推荐使用插件完成编译。Jenkins插件更加安全,一般也做好了多版本切换、环境隔离等工作。

但是,我们还是更喜欢Shell指令编译,Shell指令更加灵活,而且Jenkins插件大多没有详细的使用说明。

对于一些特别复杂的代码编译,例如自研框架等,或者希望Jenkins可以大杂烩地编译多种软件的话,则推荐采用Jenkins调用docker的方式进行编译

就是将单个编译环境打包成docker镜像,Jenkins在编译时采用此镜像进行编译,但是配置起来有些麻烦,特别是docker运行的Jenkins中再内嵌docker,将在下一期重点展开。

顺便一提,使用图形软件界面编译虽然可以实现,但是特别麻烦,也不实用,无法捕获编译错误,这里不作展开。

配置:远程部署

第三步远程部署程序。

这一步骤同样可以采用Shell指令完成,可以使用scp、ssh完成文件发送、远程指令执行。

​如果担心密码泄漏等问题,可以使用Jenkins的Publish Over SSH插件完成这一步骤。

下载完Publish Over SSH插件后,需要先在全局的系统配置中添加好远程服务器

完成以上准备工作后,在发布任务配置中就可以选择对应远程服务器,配置需要发送的文件、及需要远程执行的shell指令。

当然,一些安全等级比较高的生产环境,一般都做了严格的网络隔离。

如果不允许自动远程发送文件、部署程序的话,则可能需要人工下载文件进行手工部署了。

可以在具体发布任务的workspace中找到需要的文件并进行下载。

​配置:任务自动触发

第四步是配置任务自动触发。

如果是比较重要的运行环境,如生产环境,还是手动点击触发任务比较好。

如果是开发环境、测试环境,则更推荐自动触发任务。

比如新代码上传Git仓库后,自动触发任务,或者Git仓库打上新的tag标签后,自动触发任务。

配置任务自动触发,需要在具体发布任务配置中获取对应的API地址,其中TOKEN_NAME需要替换成设置的Token,JENKINS_URL需要替换成实际的Jenkins的IP地址。

但是这个API通常是调用不通的,除非配置了允许不登录即可使用Jenkins,所以还需要在API地址中设置用户名和用户token。

用户token需要手动创建,打开用户设置在API Token中新建token。新建token在关闭页面后,将不再显示。

完整的API如图所示。

获取到完整的API后,即可在具体的Git仓库的WebHook中进行配置。

Git仓库的WebHook设置中,可以勾选触发事件,如Push事件那么每次新代码上传时,就会自动触发Jenkins发布任务

总结

本期主要介绍了Jenkins的基本使用方法,当然Jenkins还有很多功能。

如编译历史、历史归档、自动升级、多节点执行任务、账号权限等等功能,这里不作展开。

另外,Jenkins实质上是一个很完整的分布式云计算任务系统

它甚至可以作为业务系统的一部分,以实现复杂耗时的云计算任务,感兴趣的朋友可以深入了解一下。

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

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

相关文章

智能交通(三)——Elsevier特刊推荐

特刊征稿 01 期刊名称: Vehicular Communications 特刊名称: Computational Aspects of Vehicular Networks 截止时间: 论文提交日期:2024年7月21日 录用通知:2024年9月30日 期末论文:2024年10月30日 目标及范围: 主题包括…

windows10下本机FTP服务搭建教程

文章目录 前言一、FTP服务器简介二、开启FTP服务站点(所有用户可访问)1.安装FTP服务2.配置FTP服务器3.本机访问ftp服务 三、开启FTP服务站点(指定用户可访问)1.创建本地用户2.添加FTP站点3.本机访问ftp服务 总结 前言 ftp服务器主…

Linux——分离部署,分化压力

PQS/TPS 每秒请求数/ 每秒事务数 // 流量衡量参数 可以根据预估QPS 和 服务器的支持的最高QPS 对照计算 就可以得出 需要上架的服务器的最小数量 PV 页面浏览数 UV 独立用户访问量 // 对于网站的总体访问量 response time 响应时间 // 每个请求的响应时间…

828华为云征文 | Flexus X实例与Harbor私有镜像仓库的完美结合

前言 华为云828企业上云节,Flexus X实例携手Harbor私有镜像仓库,共创云上安全高效新生态!Flexus X以其卓越性能与稳定性,为Harbor提供了理想的运行环境。Harbor作为领先的私有镜像仓库,与Flexus X完美结合,…

[OpenGL]使用OpenGL绘制三角形

一、简介 本文介绍了如何在linux/win(wsl2)环境下,使用GLFWGLAD实现绘制三角形。 本文内容基本根据LearnOpengGL-入门-你好,三角形整理完成,读者也可以参考LearnOpengGL-入门-你好,三角形自行学习如何使用OpenGL绘制三角形。 按…

【人工智能学习笔记】3_2 机器学习基础之机器学习经典算法介绍

线性回归算法的定义和任务类型 定义:线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法任务类型:回归应用场景:异常指标监控 农业贷款监控过拟合和欠拟合 定义:过拟合和欠拟合用来度量模型泛化能力的直观表现欠拟合:模型…

笔记共享平台|基于Java+vue的读书笔记共享平台系统(源码+数据库+文档)

笔记共享平台|读书笔记共享平台系统 目录 基于Javavue的读书笔记共享平台系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道…

基于大数据的科研热点分析与挖掘系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 科研活动的快速发展产生了大量的学术文献,如何从这些文献中提炼出有价值的科研热点和趋势成为了一个重要的问题。本项目旨在开发一个基于大数据的科研热点分析可视化系统,采…

微模块冷通道动环监控:智能化数据中心管理利器@卓振思众

在现代数据中心和机房管理中,微模块冷通道动环监控系统的引入,标志着对冷却和环境管理的新纪元。这一系统不仅提升了数据中心的运维效率,还对设备的安全性和稳定性提供了强有力的保障。本文将详细探讨微模块冷通道动环监控的功能和其在数据中…

Missing package to enable rendering OpenAI Gym in Colab

题意:“缺少用于在 Colab 中渲染 OpenAI Gym 的软件包。” 问题背景: Im attempting to render OpenAI Gym environments in Colab via a Mac using the StarAI code referenced in previous questions on this topic. However, it fails. The key erro…

基于开源WQ装备知识图谱的智能问答全流程构建

基于知识图谱的智能问答系统是一种利用知识图谱结构化数据来回答自然语言问题的技术。知识图谱存储了实体(如人、地点、物品等)及其之间的关系,允许智能系统查询相关的信息并推理答案。 1、知识图谱的智能问答系统核心流程: 问题…

如何通过海外云手机提升运营效率

随着技术的不断进步,市场上出现了越来越多的提高跨国电商运营效率的应用,海外云手机就是其中一个。海外云手机的优势体现在多个方面,那么如何通过使用海外云手机来提升运营效率?可以从以下几个方面了解。 首先,海外云手…

中国人民银行:数字人民币交易额已达7万亿元!中俄考虑使用国家数字货币进行双边结算!

近年来,数字货币的迅速发展引起了全球的广泛关注。中国人民银行(PBOC)近日透露,数字人民币(e-CNY)的交易额已接近1万亿美元,这标志着中国在数字货币领域的重大进展。同时俄罗斯也表示&#xff0…

shader 案例学习笔记之mix函数

mix函数: 在两个值之间进行插值; 使用: #ifdef GL_ES precision mediump float; #endifuniform vec2 u_resolution; uniform float u_time;vec3 colorA vec3(0.149,0.141,0.912); vec3 colorB vec3(1.0,0.83,0.224);void main(){vec2 st…

生成你想要的测试数据,除了用这6款工具,还能用AI

在软件测试中,测试数据是测试用例的基础,对测试结果的准确性和全面性有着至关重要的影响。因此,在进行软件测试时,需要生成测试数据以满足测试场景和要求。 本文将介绍什么情况下需要生成测试数据,常用的测试数据生成…

路径规划与轨迹跟踪系列算法学习 MATLAB 模型预测控制MPC

下面这张图的程序 019 路径规划与轨迹跟踪是自动驾驶汽车、无人机以及其他自动化系统中的关键技术之一。MATLAB 提供了丰富的工具箱来实现这些功能,其中模型预测控制(Model Predictive Control, MPC)是一种广泛使用的路径跟踪控制方法。下面是…

快速搭建最简单的前端项目vue+View UI Plus

1 引言 ‌‌Vue是一套用于构建Web前端界面的渐进式JavaScript框架。‌‌它以其易学易用、性能出色、灵活多变而深受开发者喜爱,并且与其他前端框架(如‌React和‌Angular)相比,在国内市场上受到了广泛的认可和使用。点击进入官方…

【线程池】Java 线程池 ThreadPoolExecutor 类源码介绍

文章目录 前言线程池是什么线程池解决了哪些问题本文主要讲述什么感谢读者 线程池 UML 类图ThreadPoolExecutor 内部设计核心参数内部类任务队列拒绝策略 ThreadPoolExecutor 源码线程池生命周期线程池构造函数execute() 【提交任务】addWorker() 方法 【添加工作线程并启动】了…

【微服务】⭐️华为云obs功能抽取到公共服务,供所有项目使用

目录 🍸前言 🍻一、公共服务搭建 🍺二、代码实现 1.工具类编写 2.项目引入使用 🍹三、章末 🍸前言 小伙伴们大家好,上次讲了如何本地对接华为云Obs对象存储服务,在本地项目中通过sdk引入调用…

【QT】常用控件-下

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:QT 目录 👉🏻QComboBox👉🏻 QSpinBox👉🏻QDateTimeEdit👉🏻QD…