从零开始:使用Jenkins实现高效自动化部署
在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得更远、更快。
目录
初识持续集成
Jenkins安装教程
Jenkins安装
更改工作目录
插件安装
中文设置
Jenkins基本使用
新建Job任务
初识持续集成
持续集成:指的是频繁地(一天多次)将代码集成到主干,它的好处注意有一下两个
1)快速发现错误:没完成一点更新就集成到主干,可以快速发现错误定位错误也比较容易
2)防止分支大幅偏离主干:如果不是经常集成主干又在不断更新,会导致以后集成的难度变大,甚至难以集成
持续集成强调开发人员提交了新代码之后,立即进行构建、单元测试,根据测试结果我们可以确定新代码和原有代码能否正确地集成在一起,如下图所示:
持续交付:指的是频繁地将软件的新版本交付给质量团队或者用户以供评审,如果评审通过代码就进入生产阶段,持续交付可以看作持续集成的下一步。它强调的是不管怎么更新软件是随时随地可以交付的。持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-likeenvironments)中,比如我们完成单元测试后可以把代码部署到连接数据库的Staging环境中更多的测试,如果代码没有问题可以继续手动部署到生产环境中。
持续部署:持续交付的下一步指的是代码通过评审以后自动部署到生产环境,持续部署的目标是代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤。
持续集成操作流程:根据持续集成的设计,代码从提交到生产整个过程有以下几步:
1)提交:流程的第一步是开发者向代码仓库提交代码,所有后面的步骤都始于本地代码的一次提交(commit)
2)测试(第一轮):代码仓库对commit操作配置了钩子(hook)只要提交代码或者合并进主干就会跑自动化测试,测试的种类主要有以下几种,第一轮至少要跑单元测试:
单元测试:针对函数或模块的测试
集成测试:针对整体产品的某个功能的测试,又称功能测试
端对端测试:从用户界面直达数据库的全链路测试
3)构建:通过第一轮测试代码就可以合并进主干就算可以交付了,交付后就先进行构建(build)再进入第二轮测试,所谓构建指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等,常见构建工具如下所示:
Jenkins;Travis;Codeship;Strider,其中Jenkins和Strider是开源软件,Travis和Codeship对于开源项目可以免费使用。它们都会将构建和测试,在一次运行中执行完成
4)测试(第二轮):构建完成就要进行第二轮测试,如果第一轮已经涵盖了所有测试内容第二轮可以省略,当然这时构建步骤也要移到第一轮测试前面,第二轮是全面测试,单元测试和集成测试都会跑,有条件的话也要做端对端测试。所有测试以自动化为主,少数无法自动化的测试用例就要人工跑。需要强调的是新版本的每一个更新点都必须测试到,如果测试的覆盖率不高,进入后面的部署阶段后很可能会出现严重的问题。
5)部署:通过了第二轮测试当前代码就是一个可以直接部署的版本(artifact),将这个版本的所有文件打包(tarfilename.tar*)存档,发到生产服务器,生产服务器将打包文件解包成本地的一个目录,再将运行路径的符号链接(symlink)指向这个目录然后重新启动应用,这方面的部署工具有Ansible,Chef,Puppet等
6)回滚:一旦当前版本发生问题就要回滚到上一个版本的构建结果,最简单的做法就是修改一下符号链接指向上一个版本的目录
Jenkins安装教程
Jenkins:原名Hudson,2011年改为现在的名字,它是一个开源的实现持续集成的软件工具且能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性,其官方网址:官网 以及其插件地址:插件 ,如下图所示:
其主要特点如下所示:
1)开源和免费的:Jenkins是完全开源的,任何人都可以自由下载、使用和修改源代码。这使得它在开发者社区中非常受欢迎。
2)支持多种插件:Jenkins拥有庞大的插件生态系统,支持与各种工具和平台的集成,比如 Git、Docker、Kubernetes、Maven、Gradle 等,极大地扩展了其功能。
3)自动化构建与部署:Jenkins可以自动化整个构建、测试和部署过程,确保每次代码提交都能经过完整的质量检查,并自动部署到指定环境中,从而减少了人工干预和错误。
4)可扩展性强:通过插件机制和分布式构建架构,Jenkins可以轻松地扩展到多个节点适应不同规模的团队和项目。
5)易于配置和使用:Jenkins提供了友好的图形用户界面(GUI)和Web界面,用户可以通过简单的配置界面创建和管理流水线,无需复杂的命令行操作。
6)支持多种编程语言和平台:Jenkins不依赖于特定的编程语言或平台,支持Java、Python、Ruby、Node.js等多种开发语言,几乎可以与任何开发环境兼容。
7)强大的社区支持:由于其广泛的使用,Jenkins拥有一个活跃的开发者社区,提供了大量的文档、教程和技术支持,帮助用户解决问题。
8)持续集成与持续交付(CI/CD):Jenkins在持续集成和持续交付方面非常出色,能够自动化从代码集成到最终交付的整个流程,有助于提高开发效率和软件质量。
Jenkins安装
接下来我们开始正式的安装Jenkins,来到官网点击下载然后安装文档版本即可,根据自身情况选择不同的安装平台,这里我就以windows平台举例,如下选择该平台进行下载安装即可:
下载完文件之后,我们双击文件进行下载,这里推荐非系统盘(C盘)文件路径进行下载即可:
接下来进入账户选择界面,没有账户的直接选择第一个即可,然后点击下一步:
然后下一步来到端口的选择,默认是8080,可以点击下面的测试端口按钮校验是否端口被占用:
下一步来到了jdk版本的选择,请先确保你电脑上是有jdk版本的,如果没有得提前安装配置一下:
选择完jdk版本之后,这里直接默认下一步然后点击Install进行安装即可:
然后完成之后我们来到浏览器,输入localhost:8080就会进行到一个默认的界面如下,界面中告诉了我们初始密码已经被保存到本地的某个文件当中,我们找到该密码然后粘贴到输入框中即可:
输入完密码之后来到了插件选择的界面, 因为在安装插件的过程中可能由于插件过大导致页面卡住,所以这里我们选择第二个自定义插件的安装:
然后接下来开始创建第一个管理员账户,因为是本地操作,账户密码简单来就行:admin和123456
接下来开始进入到实例配置中,因为是本地安装所以域名就是默认的localhost,后期如果要安装到服务器的话,在服务器中域名直接设置服务器的ip地址即可:
点击保存继续之后,接下面就会进入到我们的Jenkins操作控制台了,如下所示:
更改工作目录
上面的安装过程中,默认我们的Jenkins工作目录安装到C盘了,这里我们需要重新更改其工作目录,如下找到我们原本设置安装Jenkins的目录当中,找到下面的文件,然后将原本的C盘的工作目录更改为我们自定义的D盘目录:
然后来到我们之前找输入密码的C盘文件的那个目录当中,将这个目录下的所有文件全部copy到我们设置的工作目录当中:
然后我们打开任务管理器,搜索Jenkins服务,对该服务进行重新启动:
然后重新在浏览器中打开我们的Jenkins平台,输入账户密码之后来到管理系统界面,可以看到外面的工作目录已经生效了:
插件安装
之前我们是没有安装插件然后进行安装Jenkins的,这是因为如果我们直接安装插件是特别的卡的,需要我们配置一下安装的国内镜像源才可以流畅的下载插件,镜像源如下所示:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
配置镜像源:然后我们在Jenkins平台中安装如下目录找到配置镜像源的地方,进行保存即可:
修改服务器配置:接下来还需要修改一下对应的服务器配置,进行jenkins工作目录下的/updates/default.json,将其中的文件内容进行一些替换,如下所示:
updates.jenkins-ci.org/download替换为mirrors.tuna.tsinghua.edu.cn/jenkins
有些jenkins版本当中,是将
updates.jenkins.io/download替换为mirrors.tuna.tsinghua.edu.cn/jenkins
然后把www.google.com换成www.baidu.com,如下所示:
重新启动服务:接下来我们就需要重新启动Jenkins服务,重新登录Jenkins之后,进入插件管理中心就可以爽快的安装各种插件了:
点击安装之后可以看到我们的安装速度是非常快的, 几秒钟之后相关的依赖就已经安装成功了:
中文设置
接下来我们可以安装一个语言的插件,然后对我们的平台进行中文设置,插件安装如下所示,安装完插件之后进行重启即可,重启方法在URL的后面加上restart,例如http://localhost:8080/restart,然后选择Configure System找到Locale选项输入zh_CN勾选下面的选项,点击Apply和save即可:
如果上述方法没有效果,直接安装下面的这个插件,重启即可:
可以看到我们的平台已经部分实现中文化了,还是可以的:
Jenkins基本使用
Jenkins中有3大重要概念:
1)Job(任务/工程):在Jenkins平台中都是以Job(任务/工程)为单位去完成一件事情的。
2)plugin(插件):Jenkins提供平台集成各种插件来完成一个Job,想用jenkins平来做什么先找找有没有相应的插件,比如windows命令、Linux命令的支持、SVN和Git代码获取、邮件发送,测试报告集成等都需要安装相应的插件才能够在jenkins当中使用这些功能
3)workspace(工作空间):Jenkins是通过文件形式来存储和管理数据的,在安装Jenkins要指定一个Jenkins_Home目录,所有Jenkins相关的数据都存放在此目录下,workspace即给jenkins指定一个专门的目录来存储其所有的配置和数据。Jenkins的workspace是根目录,其下每个Job都有属于自己的workspace,每个job的workspace当中用来存放本任务涉及到的数据/文件,以及任务执行完成后生成的数据/文件,相当于给每一个job开辟了一个独立的文件夹
新建Job任务
接下来我们新建一个Job任务来实现一个前端编译打包的功能:
下面选择任务的类型,第一个就是自定义项目配置,其他配置是按照安装的插件进行设置的,这里我没有安装插件就只有一个自定义配置,那我们选择它好了:
然后我们点击确定之后,创建的任务主要分为以下六个步骤进行:
1)General(常规):在这个部分设置任务的一些基本信息,为任务添加描述通常用于说明这个任务的功能和用途,以及设置一些包的保存情况:
2)源码管理(Source Code Management):配置该Job需要从哪里获取源代码,可以选择不同的源码管理工具,通常Git是最常用的,配置Git仓库的URL和认证信息可以指定分支、标签或提交,还可以设置是否在构建之前执行拉取代码操作或是通过定时更新源代码:
3)Triggers(构建触发器):设置任务触发的条件可以选择多种触发方式,例如每周、每天或每小时运行一次,通常使用Cron表达式,当Git仓库中的代码发生变动(如推送代码时)自动触发构建,通过其他系统的API或脚本触发该任务
这里我们可以选择按照日期定时发送任务,例如:
定时任务:
分钟:0-59
小时:0-23
一月的天数:1-31
月份:1-12
一周的天数:0-7(0和7表示周天)例如:
1)每天晚上20点整自动执行
0 20 ***2)一周1,3,5晚上20点整执行
0 20 ** 1,3,53)每周周1 —— 周5晚上20点整执行
0 20 ** 1-54)一周内每2天,晚上20点整执行
0 20 *** /2
4)Environment(环境变量):在这里可以为构建设置环境变量供后续的构建步骤使用,可以为构建过程设置一些环境变量(例如路径、版本信息等),配置代理、身份验证、代理服务器等环境信息,确保构建能够顺利执行:
5)Build Steps(构建步骤):定义任务在执行过程中要进行的具体操作,可以选择多种构建工具和构建方式,根据需要选择其他的构建工具,执行构建、打包、发布等操作:
6)构建后操作(Post-build Actions):构建完成后执行的一系列操作,通常是部署、通知等,比如触发其他 Jenkins 任务,或者执行外部脚本:
相关文章:

从零开始:使用Jenkins实现高效自动化部署
在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得…...

Spring Cloud工程完善
目录 完善订单服务 启动类 配置文件 实体类 Controller Service Mapper 测试运行 完成商品服务 启动类 配置文件 实体类 Controller Service Mapper 测试运行 远程调用 需求 实现 1.定义RestTemplate 2.修改order-service中的OrderService 测试运行 Rest…...

SSM仓库物品管理系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码:2.保存物品信息代码:3.删除仓库信息代码: 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SSM框架开发的仓库…...

UI自动化测试中如何处理验证码?
在UI自动化测试中处理验证码是常见的技术挑战,以下是分步解决方案及实际应用建议: 一、验证码处理策略对比 方法实现方式优点缺点适用场景禁用验证码测试环境配置关闭验证码生成简单快捷,零成本无法测试验证码功能本身非验证码相关功能测试万…...

华为交换机堆叠配置
一、CSS堆叠集群配置(框式交换机) 1、通过集群卡连接方式组建集群 [SwitchA] set css mode css-card \\配置集群卡连接方式 [SwitchA] set css id 1 \\配置成员交换机的集群ID(缺省值为1) [SwitchA] set css priority 100 \\配…...

Vue 和 dhtmlx-gantt 实现图表构建动态多级甘特图效果 ,横坐标为动态刻度不是日期
注意事项:1、横坐标根据日期转换成时间刻度在( gantt.config.scales);2、获取时间刻度的最大值(findMaxRepairTime);3、甘特图多级列表需注意二级三级每个父子id需要唯一(convertData) 安装依赖 npm install dhtmlx-gantt --save 在当前页引入和配置 dhtmlx-gantt im…...

collabora online+nextcloud+mariadb在线文档协助
1、环境 龙蜥os 8.9 docker 2、安装docker dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i shttps://download.docker.comhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.…...

“可通过HTTP获取远端WWW服务信息”漏洞修复
环境说明:①操作系统:windows server;②nginx:1.27.1。 1.漏洞说明 “可通过HTTP获取远端WWW服务信息”。 修复前,在“响应标头”能看到Server信息,如下图所示: 修复后,“响应标头…...

【AI时代】-开发环境准备 之 Conda 创建 Python 环境 (含pip常用命令、jupyter 安装及汉化、自定义文档位置等配置)
一、 安装 Anaconda 1.1 下载并安装 https://www.anaconda.com/download/success 1.2 验证是否成功 CMD输入命令: conda --version注意:找不到命令需要配置环境变量: Path 中 添加 Anaconda 的安装路径: 如果没有修改安装位…...

[LeetCode] day19 454. 四数相加 II
题目链接 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1: 输入&…...

LeetCodehot 力扣热题100 验证二叉搜索树
class Solution {vector<int> nums; // 用来存储二叉树节点值的数组 public:bool isValidBST(TreeNode* root) {inorder(root); // 中序遍历二叉树,填充 nums 数组// 遍历 nums 数组,检查是否为严格递增序列for(int i0; i<nums.size()-1; i){…...

四次挥手详解
文章目录 一、四次挥手各状态FIN_WAIT_1CLOSE_WAITFIN_WAIT_2LAST_ACKTIME_WAITCLOSE 二、双方同时调用close(),FIN_WAIT_1状态后进入CLOSING状态CLOSING状态 三、TIME_WAIT状态详解(1) TIME_WAIT状态下的2MSL是什么MSL (报文最大生存时间)为…...

Deepseek-v3 / Dify api接入飞书机器人go程序
准备工作 开通了接收消息权限的飞书机器人,例如我希望用户跟飞书机器人私聊,就需要开通这个权限:读取用户发给机器人的单聊消息 im:message.p2p_msg:readonly准备好飞书机器人的API key 和Secretdeepseek-v3的api keysecret:http…...

2025.2.9 每日学习记录2:技术报告写了一半+一点点读后感
0.近期主任务线 1.完成小论文准备 目标是3月份完成实验点1的全部实验和论文。 2.准备教资笔试 打算留个十多天左右,一次性备考笔试的三个科目 1.实习申请技术准备:微调、Agent、RAG 1.今日完成任务 1.电子斗蛐蛐(文本书写领域&am…...

qml ToolBar详解
1、概述 在 QML 中,ToolBar 是一种常用的 UI 组件,通常位于窗口的顶部或底部,用于提供一系列的操作按钮、菜单或其他交互元素。它可以帮助用户快速访问应用程序的常用功能,提高用户操作的便捷性。ToolBar 可以包含多个 ToolButto…...

机器学习在癌症分子亚型分类中的应用
学习笔记:机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题:Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊:Cancer Cell发表时间:20…...

Ansible自动化部署K8s集群一 Ansible的基础使用实战
一、Ansible介绍 1.安装ansible: yum install ansible -y 2.ansible的架构图: 3.ansible四部分: inventory:ansible管理的主机信息,包括ip地址、ssh端口、账号和密码等 modules:任务均由模块完成 plugins:增加ansible的核心功能 pla…...

ZooKeeper Watcher 机制详解:从注册到回调的全过程
引言 在分布式系统中,数据的实时性和一致性是至关重要的。ZooKeeper 通过其 Watcher 机制提供了一种高效的方式来监听数据变化或事件,从而使客户端能够在数据发生变化时立即收到通知。本文将深入探讨 ZooKeeper 的 Watcher 机制,具体包括客户…...

flutter_tools/gradle Unsupported class file major version 65 问题解决
1.问题定位 使用 命令 flutter doctor --verbose 可以查看当前项目中,使用的java的版本。 [✓] Android Studio (version 2024.2)• Android Studio at /Applications/Android Studio.app/Contents• Flutter plugin can be installed from:🔨 https…...

C++设计模式 - 模板模式
一:概述 模板方法(Template Method)是一种行为型设计模式。它定义了一个算法的基本框架,并且可能是《设计模式:可复用面向对象软件的基础》一书中最常用的设计模式之一。 模板方法的核心思想很容易理解。我们需要定义一…...

mysql查缺补漏
好文推荐: 【数据库】快速理解脏读、不可重复读、幻读-CSDN博客 再探幻读!什么是幻读?为什么会产生幻读,MySQL中是怎么解决幻读的?-CSDN博客 引擎 mysql默认引擎:innodb 1.支持行锁 2.支持事务 3.支持外键 索引…...

跨越边界,大模型如何助推科技与社会的完美结合?
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 概述 2024年,大模型技术已成为人工智能领域的焦点。这不仅仅是一项技术进步,更是一次可能深刻影响社会发展方方面面的变革。大模型的交叉能否推动技术与社会的真正融合?2025年…...

哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测
哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测 目录 哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测效果一览基本介绍程序设计参考资料 效果一览…...

前端【技术方案】浏览器兼容问题(含解决方案、CSS Hacks、条件注释、特性检测、Polyfill 等)
浏览器兼容性测试工具 https://www.browserstack.com/ HTML 兼容处理 问题1 - 不支持 HTML5 新标签 旧版浏览器(主要是 IE8 及以下)不支持 HTML5 新标签(如 <header>、<nav>、<article> 等) 解决方案 引入 H…...

荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测
目录 荣耀Magic系列手机详细对比 最新二手价格预测 性价比分析 总结 以下是荣耀Magic系列手机的详细对比以及最新二手价格预测: 荣耀Magic系列手机详细对比 特性荣耀Magic3系列荣耀Magic4系列荣耀Magic5系列荣耀Magic6系列荣耀Magic7系列处理器骁龙888&#x…...

后盾人JS -- 模块化开发
开发模块管理引擎 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…...

CNN卷积神经网络多变量多步预测,光伏功率预测(Matlab完整源码和数据)
代码地址:CNN卷积神经网络多变量多步预测,光伏功率预测(Matlab完整源码和数据) 标题:CNN卷积神经网络多变量多步预测,光伏功率预测 一、引言 1.1 研究背景及意义 随着全球能源危机的加剧和环保意识的提升ÿ…...

深入 JVM 虚拟机:字符串常量池演变与 intern() 方法工作原理解析
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 📝 如有错误敬请纠正! 前言 在 Java 开发中,字符串常量池(String Constant…...

单向/双向,单层/多层RNN输入输出维度问题
单向/双向,单层/多层RNN输入输出维度问题 RNN单层单向RNNRnn CellRnn 双层单向RNN单层双向RNN双层双向RNN RNN 单层单向RNN Rnn Cell 循环神经网络最原始的Simple RNN实现如下图所示: 下面写出单个时间步对应的Rnn Cell计算公式: 如果用矩阵运算视角来看待的话&…...

chromium-mojo
https://chromium.googlesource.com/chromium/src//refs/heads/main/mojo/README.md 相关类:https://zhuanlan.zhihu.com/p/426069459 Core:https://source.chromium.org/chromium/chromium/src//main:mojo/core/README.md;bpv1;bpt0 embedder:https://source.chr…...