当前位置: 首页 > news >正文

Jenkins:持续集成与持续部署的利器

🐇明明跟你说过:个人主页

🏅个人专栏:《未来已来:云原生之旅》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、什么是Jenkins

2、Jenkins的起源

二、Jenkins的核心组件

1、Jenkins 主节点(Master)

2、Jenkins 从节点(Agent/Slave)

3、作业(Job)

4、构建(Build)

5、插件(Plugins)

6、用户界面(UI)

7、Jenkinsfile(管道文件)

三、Jenkins工作流程

1、Jenkins 工作流程的核心组件

2、Jenkins 流水线的执行过程


一、引言

1、什么是Jenkins

Jenkins 是一个开源的自动化服务器,主要用于持续集成(CI)和持续交付(CD)工作流的管理和执行。Jenkins 通过自动化软件开发生命周期中的构建、测试和部署过程,帮助开发团队更快、更高效地交付软件产品。

Jenkins 是由 Kohsuke Kawaguchi 于 2004 年开发,并在 2011 年成为开源项目。如今,Jenkins 已成为业界最受欢迎的持续集成工具之一,广泛应用于 DevOps 和自动化部署领域。

2、Jenkins的起源

Jenkins 最初是作为 Hudson 项目开始的,后来因项目管理上的分歧而独立出来,并更名为 Jenkins。

1. Hudson的诞生

  • 2004年,Jenkins 的创始人 Kohsuke Kawaguchi Sun Microsystems 工作时开始了 Hudson 项目的开发。最初,Hudson 是一个用于持续集成(CI)的工具,目的是解决软件开发中的集成和构建问题。
  • Hudson 被设计成一个开源的自动化构建工具,它提供了一个简单、可靠的框架来实现自动化构建、测试和部署。

2. Hudson的成功

  • Hudson 被开发者社区广泛接受,成为了最流行的持续集成工具之一。它具有丰富的插件支持,可以与各种开发和版本控制工具(如 Git、Subversion 等)集成。
  • Hudson 的稳定性和易用性使它成为许多开发团队的首选工具。

3. 管理分歧与Jenkins的独立

  • 2010年,Oracle 收购了 Sun Microsystems 后,Hudson 项目的开发方向发生了变化。Oracle 在管理 Hudson 项目时,做出了一些决策,这些决策不被社区广泛接受。
  • 由于对 Oracle 管理方式的不满,Kohsuke Kawaguchi 和其他核心开发者决定将 Hudson 项目从 Oracle 的控制下分离出来。
  • 2011年,Kohsuke Kawaguchi 和他的团队创建了一个新的开源项目,命名为 Jenkins,这个名字取自一个带有俏皮意味的名字——"Jenkins the Butler"(Jenkins 侍者),寓意着 Jenkins 是一个服务于开发者的工具。

4. Jenkins与Hudson的分歧

  • 由于管理上的分歧,Hudson 项目继续在 Oracle 的支持下发展,而 Jenkins 作为一个独立的项目,得到了更强大的社区支持。Jenkins 很快超越了 Hudson,成为了开源界最受欢迎的持续集成工具。
  • 2011年,Jenkins 被正式推向市场,并迅速获得了大规模的社区支持,许多开发团队选择迁移到 Jenkins。

5. Jenkins的快速发展

  • Jenkins 在独立后的几年中,得到了大量贡献和支持,其插件系统和灵活性不断增强,支持多种开发工具、部署工具和云服务,成为 DevOps 文化的一个重要组成部分。
  • Jenkins 的快速发展和高度的可扩展性,使其在全球范围内成为了持续集成和持续交付领域的领军工具之一。

 

二、Jenkins的核心组件

1、Jenkins 主节点(Master)

角色:

  • 主节点是 Jenkins 的控制中心,负责所有管理任务,如调度作业、分配构建到代理节点、管理构建历史、安装插件、以及通过 Web 界面与用户交互。

功能:

  • 负责调度构建任务并分配到从节点(如果有)。
  • 提供图形化用户界面(UI),用户可以在其中配置和管理作业。
  • 提供插件管理界面,允许安装、更新或删除插件。
  • 维护系统和作业配置文件,存储每个构建的历史记录和日志。
  • 监控所有构建和作业的状态。

2、Jenkins 从节点(Agent/Slave)

角色:

  • 从节点是用于执行构建任务的工作节点。主节点将作业分配给从节点来执行构建任务。通过使用多个从节点,Jenkins 可以实现分布式构建,提高构建的并行性和效率。

功能:

  • 执行由主节点分配的构建任务。
  • 支持不同平台(Windows、Linux、macOS),使得构建可以在多种环境下执行。
  • 与主节点保持连接并等待任务分配。
  • 可配置不同的执行环境,如设置环境变量、工具链等。

3、作业(Job)

角色:

  • 作业是 Jenkins 自动化任务的基本单位,定义了具体的构建、测试、部署过程。用户可以配置不同类型的作业来实现不同的功能,如构建、测试、部署等。

功能:

  • Freestyle Project:最常用的作业类型,支持简单的构建流程,如编译代码、运行测试、生成报告等。
  • Pipeline:一种强大的作业类型,支持定义复杂的构建流水线。通过 Groovy DSL 编写,能够描述完整的构建过程,包括构建、测试、部署等。
  • Multi-Branch Pipeline:用于支持 Git 等版本控制系统中的多分支构建,每个分支都会自动创建一个新的 Pipeline。

​ 

4、构建(Build)

角色:

  • 构建是 Jenkins 中作业执行的具体实例,每次作业执行时都会触发一个构建。构建包含了执行的各个步骤、环境设置、日志输出等内容。

功能:

  • 每个构建都会有一个唯一的构建编号。
  • 记录构建的日志,用户可以查看构建过程的详细输出。
  • 提供构建的状态信息(成功、失败、稳定等)。
  • 在构建后可进行通知、报告生成或进一步的操作。
     

5、插件(Plugins)

角色:

  • Jenkins 的核心功能非常基础,通过插件可以对其进行扩展,支持更多的功能和第三方工具的集成。插件是 Jenkins 扩展性的重要组成部分,几乎所有的 Jenkins 功能(如版本控制、构建工具、部署工具等)都是通过插件实现的。

功能:

  • 插件可以支持与多种版本控制系统(如 Git、SVN)集成,提供源代码管理功能。
  • 插件支持构建工具集成(如 Maven、Gradle)和自动化部署工具(如 Docker、Kubernetes)。
  • 插件还可以集成其他持续集成工具,如 SonarQube、JUnit、Nexus 等。

6、用户界面(UI)

角色:

  • Jenkins 提供了一个基于 Web 的用户界面,使得用户可以通过浏览器访问和管理 Jenkins。界面展示了作业、构建、插件和系统管理等功能。

功能:

  • 提供图形化的作业配置和管理界面。
  • 支持查看构建状态和历史记录,查看构建日志。
  • 用户界面支持查看报告、趋势、测试结果等。
  • 提供权限管理和用户角色控制,以确保系统的安全性。

7、Jenkinsfile(管道文件)

角色:

  • Jenkinsfile 是定义 Jenkins Pipeline 的文件,通常是一个 Groovy 脚本。Jenkinsfile 描述了一个完整的流水线,从源码拉取、构建、测试、部署等步骤。Jenkinsfile 使得 Jenkins 的流水线能够版本化,并且可以存储在版本控制系统中。

功能:

  • 通过代码定义构建流程,而不是通过 Jenkins Web UI 手动配置。
  • 支持流水线的版本控制,使得每次提交都能自动触发构建。
  • 支持并行构建、条件构建、环境变量管理等高级功能。

​ 

三、Jenkins工作流程

Jenkins 的工作流程(Pipeline)是指从源代码提交到最终的交付过程,包括代码的编译、测试、部署等任务。Jenkins 的工作流程可以通过 Jenkins Pipeline 来定义,它支持使用 DSL (Domain Specific Language) 来编写自动化的工作流脚本。

1、Jenkins 工作流程的核心组件

Jenkins 的工作流程包括几个关键的概念和组件,如 流水线、作业(Job)、节点(Node) 和 阶段(Stage)

1. 作业(Job)

  •   作业(Job)是 Jenkins 的基本构建单元,用于执行具体的任务。常见的作业类型包括自由风格作业、Maven 项目作业等。
  • 每 个作业可以配置构建步骤和触发条件,定义从代码获取到构建、测试、部署的整个过程。

2. 流水线(Pipeline)

  • 流水线 是一组自动化任务的集合。每个流水线代表一个复杂的工作流,从代码获取、构建、测试到部署。
  • 流水线通常定义在 Jenkinsfile 文件中。Jenkinsfile 是一个文本文件,包含了一系列的构建步骤,用于描述构建和部署的过程。
  • 流水线分为两种类型:声明式流水线(Declarative Pipeline)脚本化流水线(Scripted Pipeline)

3. 节点(Node)

  • 节点(Node) 是 Jenkins 执行任务的计算机或虚拟机。Jenkins 节点分为 主节点(Master)从节点(Agent)
    •  主节点(Master):负责协调任务的分配、调度等管理工作。
    •  从节点(Agent):实际执行构建任务的机器。主节点将任务分配给从节点执行。
  • 可以通过配置多个从节点来扩展 Jenkins 的计算能力。

4. 阶段(Stage)

  • 阶段(Stage) 是流水线中的一个重要概念,它是流水线的一个组成部分,每个阶段通常代表流水线中的一个特定任务,如编译、测试、部署等。
  • 在 Jenkins 中,阶段用于将流水线划分为多个明确的步骤,并按顺序执行。

5. 步骤(Step)

  • 步骤(Step) 是流水线中最小的执行单元,它执行具体的操作。每个阶段由多个步骤组成,步骤可以是执行 shell 命令、调用其他脚本或执行某个插件等。

   

2、Jenkins 流水线的执行过程

Jenkins 的工作流程通常分为以下几个步骤:

1. 源码管理

  • 在流水线开始时,Jenkins 会根据配置的源码管理工具(如 Git)获取代码。这通常会在流水线的 第一阶段 中执行。

2. 编译和构建

  • 在获取代码后,流水线将进入编译和构建阶段,通常通过执行如 mvn clean installgradle build 等命令来进行构建。

3. 测试

  • 流水线中的一个重要环节是自动化测试。Jenkins 会在构建完成后执行测试阶段。测试可以包括单元测试、集成测试、UI 测试等。

4. 构建产物存储

  • 构建完成后,Jenkins 通常会将构建产物存储到文件系统、构件库(如 Artifactory)或其他存储系统中。

5. 部署

  • 流水线中的一个重要环节是自动化部署,将构建好的应用部署到目标环境(如测试环境、生产环境)中。

6. 通知与报告

  • Jenkins 提供通知机制,当构建成功或失败时,可以通过电子邮件、Slack 等通知相关人员。此外,Jenkins 还提供构建报告和日志,帮助开发人员追踪问题。

   

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于云原生的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  

相关文章:

Jenkins:持续集成与持续部署的利器

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Jenkins 2、Jenkins的起源 二、Jenkins的核心…...

概率论得学习和整理30: 用EXCEL 描述泊松分布 poisson distribution

目录 1 泊松分布的基本内容 1.1 泊松分布的关键点 1.1.1 属于离散分布 1.1.2 泊松分布的特点:每个子区间内概率相等 , λ就是平均概率 1.2 核心参数 1.3 pmf公式 1.4 期望和方差 2 例1:用EXCEL计算泊松分布的概率 3 比较λ不同值时…...

汽车SoC芯片及其安全岛设计与未来发展趋势(学习笔记)

SoC系列已发布多篇文章,之前应该发布到4.3章节,后续还有包含常见汽车SoC,SoC评价指标,产业链及发展趋势等,均见已发布完整版本付费资源,链接如下: 汽车SoC芯片及其安全岛设计与未来发展趋势&am…...

【排序算法】——选择排序

前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小&#x…...

第十五章 Linux Shell 编程

15.1 Shell 变量 了解:Shell的功能 了解:Shell的种类 了解:Shell的调用 了解:Shell变量的概念 了解:Shell变量的定义 了解:Shell数组变量 了解:Shell内置变量 了解:双引号 和…...

【c++笔试强训】(第三十八篇)

目录 不相邻取数(动态规划-线性dp) 题目解析 讲解算法原理 编写代码 空调遥控(⼆分/滑动窗⼝) 题目解析 讲解算法原理 编写代码 不相邻取数(动态规划-线性dp) 题目解析 1.题目链接:不相…...

go 自己写序列化函数不转义

以map[int32]string转化为[]byte为例 背景:算法传给我一个map[int32]string类型的值(map的值本身是json转化成的string),我需要把这个值生成一个文件上传到OSS,但是发现通过url下载下来的文件里面有转义字符。 原因&a…...

一般行业安全管理人员考试题库分享

1.在高速运转的机械飞轮外部安装防护罩,属于(B)安全技术措施。 A.限制能量 B.隔离 C.故障设计 D.设置薄弱环节 2.生产经营单位的(B)是本单位安全生产的第一责任人,对落实本单位安全生产主体责任全面负责,具体履行安全生产管理职责。 A.全员 B…...

Marketo REST API 批量修改邮件内容

以下是更加细化的 使用 Marketo REST API 批量修改邮件内容 的步骤,详细解释每个阶段的操作,包括 API 的请求、数据处理及潜在问题解决。 前期准备工作 确保 Marketo API 访问权限 你需要 Marketo REST API 用户 和 API Role,有权限访问邮件资…...

《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制

从本节课程开始,我们将来介绍K8s安全框架,这是保障K8s集群安全比较关键的安全机制。接下来,让我们一起来探索K8s安全框架的运行机制。 在这个课程中,我们将学习以下内容: K8s安全框架:由认证、鉴权和准入控…...

淘宝获取sku详细信息 API

淘宝获取 SKU 详细信息的 API 主要是 taobao.item_sku 接口,以下是详细介绍: 公共参数 key:调用 key,是调用接口的身份验证信息,必须以 GET 方式拼接在 URL 中1.secret:调用密钥,与 key 配合使…...

基于Spring Boot的体育商品推荐系统

一、系统背景与目的 随着电子商务的快速发展和人们健康意识的提高,体育商品市场呈现出蓬勃发展的态势。然而,传统的体育商品销售方式存在商品种类繁多、用户选择困难、个性化需求无法满足等问题。为了解决这些问题,基于Spring Boot的体育商品…...

C++小细节笔记

1、C字符串转数字 – 数字转字符串 //string > int 使用 stoi stol//int > string 使用 to_string()2、C遍历 int evalRPN(vector<string>& tokens) {stack<int> intStack;for(string &str:tokens){}bool isValid(string s) {stack<char> …...

go语言并发读写数据队列,不停写的同时,一次最多读取指定量数据(逐行注释)

1、数据队列可以存储任意类型的一个数据&#xff08;下程序是添加整数值&#xff09;。 数据队列代码点这里查看《go语言结构体实现数据结构队列&#xff08;先进先出&#xff09;存储数据&#xff08;逐行注释&#xff09;》 2、读写操作并发进行&#xff08;下程序向队列中…...

密码学——密码学概述、分类、加密技术(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 密码学 大数据…...

【数据库MySQL篇二】MySQL数据库入门基础教程:一网打尽数据库和表各种操作、命令和语法

一、MySQL创建数据库 使用Create命令创建数据库 我们可以在登陆 MySQL 服务后&#xff0c;使用 create 命令创建数据库&#xff0c;语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程&#xff0c;数据名为 RUNOOB: [roothost]# mysql -u root -p…...

Android 解决“Could not resolve all artifacts for configuration ‘:classpath‘方法

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 报错背景&#xff0c;公司的项目&#xff0c;长时间没有打开&#xff0c;时隔半年再次打…...

青少年编程与数学 02-004 Go语言Web编程 08课题、使用Gin框架

青少年编程与数学 02-004 Go语言Web编程 08课题、使用Gin框架 一、Gin框架二、接收和处理请求三、应用示例 课题摘要:本文介绍了Gin框架的特点、如何接收和处理请求以及一个应用示例。Gin是一个高性能、轻量级的Go语言Web框架&#xff0c;以其快速、极简设计、强大的路由和中间…...

PostgreSQL: 事务年龄

排查 在 PostgreSQL 数据库中&#xff0c;事务年龄&#xff08;也称为事务 ID 年龄&#xff09;是一个重要的监控指标&#xff0c;因为 PostgreSQL 使用事务 ID&#xff08;XID&#xff09;来保持事务的隔离性。每个事务都会被分配一个唯一的事务 ID&#xff0c;这个 ID 随着每…...

C# 识别二维码

文章目录 一. 二维码识别技术概述二 维码识别的步骤图像预处理二维码的定位和检测二维码解码 三 常用的二维码识别库1. OpenCV2. ZXing.Net 一. 二维码识别技术概述 二维码是一种通过黑白矩阵排列来编码数据的图形符号&#xff0c;它的编码方式具有较强的容错性&#xff0c;可以…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...