jenkins 是什么?

news2025/1/13 5:51:30

一、jenkins 是什么?

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

二、CI/CD是什么?

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。

CI

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。

CI/CD

三、使用Jenkins进行PHP代码(单元)测试、打包。

Jenkins是一个强大的CI工具,虽然本身使用Java开发,但也能用来做其他语言开发的项目CI。下面讲解如何使用Jenkins创建一个构建任务。

登录Jenkins, 点击左侧的新建,创建新的构建任务。

跳转到如下界面。任务名称可以自行设定,但需要全局唯一。输入名称后选择构建一个自由风格的软件项目(其他选项不作介绍)。并点击下方的确定按钮即创建了一个构建任务。之后会自动跳转到该job的配置页面。

新建自由风格的软件项目

下图是构建任务设置界面,可以看到上方的几个选项"General", "源码管理", "构建触发器","构建环境", "构建", "构建后操作"。下面逐一介绍。

1.General

General是构建任务的一些基本配置。名称,描述之类的。

General

项目名称: 是刚才创建构建任务步骤设置的,当然在这里也可以更改。

描述: 对构建任务的描述。

丢弃旧的构建: 服务器资源是有限的,有时候保存了太多的历史构建,会导致Jenkins速度变慢,并且服务器硬盘资源也会被占满。当然下方的"保持构建天数" 和 保持构建的最大个数是可以自定义的,需要根据实际情况确定一个合理的值。

其他几个选项在这里不做介绍,有兴趣的可以查看Jenkins"帮助信息", 会有一个大概的介绍。不过这些"帮助信息"都是英文的。

点击右方的这些"问号"查看"帮助信息"

2.源码管理

源码管理就是配置你代码的存放位置。

源码管理

Git: 支持主流的github 和gitlab代码仓库。因我们的研发团队使用的是gitlab,所以下面我只会对该项进行介绍。

Repository URL:仓库地址

Credentials:凭证。可以使用HTTP方式的用户名密码,也可以是RSA文件。 但要通过后面的"ADD"按钮添加凭证。

Branches to build:构建的分支。*/master表示master分支,也可以设置为其他分支。

源码浏览器:你所使用的代码仓库管理工具,如github, gitlab.

URL:填入上方的仓库地址即可。

Version: 8.7 这个是我们gitlab服务器的版本。

Subversion:就是SVN,这里不作介绍。

****

3.构建触发器

构建触发器,顾名思义,就是构建任务的触发器。

触发远程构建(例如,使用脚本): 该选项会提供一个接口,可以用来在代码层面触发构建。这里不做介绍,后期可能会用到。

Build after other projects are built: 该选项意思是"在其他projects构建后构建"。这里不作介绍,后期可能会用到该选项。

Build periodically: 周期性的构建。很好理解,就是每隔一段时间进行构建。日程表类似 linux crontab书写格式。如下图的设置,表示每隔30分钟进行一次构建。

周期构建

Build when a change is pushed to GitLab:当有更改push到gitlab代码仓库,即触发构建。后面会有一个触发构建的地址,一般被称为webhooks。需要将这个地址配置到gitlab中,webhooks如何配置后面介绍。这个是常用的构建触发器。

Poll SCM:该选项是配合上面这个选项使用的。当代码仓库发生改动,jenkins并不知道。需要配置这个选项,周期性的去检查代码仓库是否发生改动。

十分钟检查一次

4.构建环境

构建环境就是构建之前的一些准备工作,如指定构建工具(在这里我使用ant)。

构建环境中的构建工具

With Ant:选择这个工具,并指定ant版本和jdk版本。这两个工具的版本我都事先在服务器上安装,并且在jenkins全局工具中配置好了。

其他选项不作介绍,同样可以查看"帮助信息" 获得使用帮助。

5.构建

选择下方的增加构建步骤。

增加构建步骤

可以选择的项很多。这里就介绍"Invoke Ant" 和"Execute shell".

Eexcute shell: 执行shell命令,该工具是针对linux环境的,windows环境也有对应的工 具"Execute Windows batch command"。 在构建之前,可能我们需要执行一些命令,比如压缩包的解压之类的。为了演示,我就简单的执行 "echo $RANDOM" 这样的linux shell下生产随机数命令。

Invoke Ant:Ant是一款java项目构建工具,当然也能用来构建php。

Ant Version: 选择Ant版本。这个ant版本是安装在jenkins服务器上的版本,并且需要在jenkins"系统工具"中设置好。

Targets:要执行的操作,一行一个操作任务。以上图为例,build是构建,tar是打包。

Build File: 是Ant构建的配置文件,如果不指定,则是在项目路径下的workspace目录中的build.xml。build.xml文件具体怎么配置,后面再细讲。

properties: 设定一些变量,这些变量可以在build.xml 中被引用。

Send files or execute commands over SSH:发送文件到远程主机或执行命令(脚本)

Name: SSH Server的名称。SSH Server可以在jenkins-系统设置中配置。

source files: 需要发送给远程主机的源文件。

Remove prefix: 移除前面的路径。如果不设置这个参数,则远程主机会自动创建构建源 source files 包含的那个路径。

Remote directory: 远程主机目录。

Exec command:在远程主机上执行的命令,或者执行的脚本。

6.构建后操作

构建后操作,就是对project构建完成后的一些后续操作,比如生成相应的代码测试报告。

****

邮件通知

Publish Clover PHP Coverage Report:发布代码覆盖率xml格式的文件报告。路径会在"build.xml"文件中定义

Publish HTML reports:发布代码覆盖率的HTML报告。

Report Crap: 发布crap报告

E-mail Notification: 邮件通知,构建完成后发邮件到指定的邮箱。

以上配置完成后,点击保存。

7.其他相关配置

SSH Server配置

登录jenkins -- 系统管理 -- 系统设置

配置请看下图

SSH SERVER

SSH Servers: 由于jenkins服务器公钥文件我已经配置好,所以之后新增SSH Servers 只需要配置这一项即可。

Name: 自定义,需要全局唯一。

HostName: 主机名,直接用ip地址即可。

Username: 新增Server的用户名,这里配置的是root。

Remote Directory: 远程目录。jenkins服务器发送文件给新增的server默认是在这个目录。

Ant 配置文件 "build.xml"

接下来讲解Ant 构建配置文件"build.xml"。 之所以是build.xml 这是因为官方惯例。就好比任何编程语言的入门都会是打印"Hello world". 你也可以用其他名称代替"build.xml" .

下面针对配置文件"build.xml" 关键配置进行说明。

project name就是项目名称,和jenkins所创建的对应。

target name="build" 就是构建的名称,和jenkins构建步骤 那里的targets对应。depends指明构建需要进行的一些操作。

property 用来设置变量。

fileset 这一行指明了一个文件夹,用include来指明需要包含的文件,exclude指明不包含的文件,"tar"即是打包这个文件夹中匹配到的文件。

下面的这些target都是一些实际的操作步骤,比如make_runtime这个"target" 就是创建了一些目录。phpcs就是利用PHP_CodeSniffer这个工具 对PHP代码规范与质量检查工具。

最后这个target "tar" 就是打包文件。因为上面的build 并没有包含这个target,所以默认情况下,执行build是不会打包文件的,所以在jenkins project配置界面,Ant构建那一步的targets,我们才会有"build" 和 "tar" 这两个targets。如果build.xml 中 "build"这个target depends中已经包含"tar" , 就不需要在jenkins中增加"tar"了。

其他一些target 都是利用一些工具对php代码的操作,比如phpunit是进行php单元测试。这一些方面我没有深入的研究,只是进行了一些简单的配置,毕竟不是这方面的专业人士。

配置 Gitlab webhooks

在gitlab的project页面 打开settings,再打开 web hooks 。点击"ADD WEB HOOK" 添加webhook。把之前jenkins配置中的那个url 添加到这里,添加完成后,点击"TEST HOOK"进行测试,如果显示SUCCESS 则表示添加成功。

配置phpunit.xml

phpunit.xml是phpunit这个工具用来单元测试所需要的配置文件。这个文件的名称同样也是可以自定义的,但是要在"build.xml"中配置好名字就行。默认情况下,用"phpunit.xml", 则不需要在"build.xml"中配置文件名。

build.xml中phpunit配置

fileset dir 指定单元测试文件所在路径,include指定包含哪些文件,支持通配符匹配。当然也可以用exclude关键字指定不包含的文件。

四、进行jenkins project 构建

第一次配置好jenkins project之后,会自动触发一次构建。此后,每当有commit 提交到master分支(前面设置的是master分支,也可以设置为其他分支),就会触发一次构建。当然也可以在project页面手动触发构建。点击左边的"立即构建" 手动触发构建。

手动触发构建

五、构建结果说明

构建状态

Successful蓝色:构建完成,并且被认为是稳定的。

Unstable黄色:构建完成,但被认为是不稳定的。

Failed红色:构建失败。

Disable灰色:构建已禁用

构建稳定性

构建稳定性用天气表示:晴、晴转多云、多云、小雨、雷阵雨。天气越好表示构建越稳定,反之亦然。

构建历史界面

console output: 输出构建的日志信息

六、jenkins权限管理

由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin。基于这个插件的权限管理设置请参考这篇文章:jenkins配置基于角色的项目权限管理设置步骤_russ44的博客-CSDN博客,这里不作详细介绍。

至此,就可以用jenkins周而复始的进行CI了,当然jenkins是一个强大的工具,功能绝不仅仅是以上这些,其他方面要是以后用到,我会更新到这篇文章中。有疑问欢迎在下方留言。

最后,放上一张Jenkins的思维导图

2、Docker、Kubernetes的 CICD实现思路

代码变更→触发jenkins build→拉取代码到jenkins节点→mvn打war包→测试→dockerfile打成镜像→docker tag →docker push到harbor → k8s部署

Jenkins是一个比较流行的持续集成工具 GitLab是存储镜像的镜像仓库

由客户端将代码push推送到git仓库,gitlab上配置了一个webHook的东西可以触发Jenkins的构建。进入到Jenkins虚线范围内,它所做的事情非常多,从mvn构建代码,对代码进行静态分析,做单元测试,测试通过之后就可以build镜像,镜像构建成功后就把镜像push推送到Harbor镜像仓库中,镜像push推送到镜像仓库后,我们就可以调用kubernetes集群的restAPI更新服务,而后kubernetes接收到了更新的指令,从Harbor镜像仓库pull拉取镜像,从而完成服务的更新与重启,最后我们从客户端来访问kubernetes集群的服务

1.开发从镜像库里获取基础镜像,对应用进行容器化开发;

2.开发提交代码到Gitlab(在Kubernetes中实现Gitlab服务,并通过持久化存储保存用户数据);

3.Gitlab收到代码提交请求后通过webhook触发Jenkins master

4.Jenkins master收到请求后在slave节点中对源码进行打包;

5.在源码打包完成后根据流水线,从Gitlab中获取dockerfile,在slave节点中生成docker images;

6.Docker镜像生成之后上传到Docker 私有仓库harbor;

8.通过Jenkins流水线在Kubernetes测试环境拉取镜像,部署应用;

9.测试成功之后,通过Jenkins流水线在Kubernetes生产环境进行应用的部署上线。

其中build镜像过程还可以细分为两部:

1、构建可执行的程序包(Java为tar包)

2、将tar包导入基础镜像(Java程序的基础镜像可以理解为一个包含了JDK的linux系统),其实现可以通过dockerfile导入tar包到基础镜像从而构建为应用镜像,也可以通过openshift的s2i启动一个名为build的pod将tar包的二进制流导入基础镜像然后通过docker commit构建为应用镜像

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

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

相关文章

集简云 x 车邻邦丨实现金蝶云星辰快速集成第三方系统,实现单据自动同步

品牌故事 车邻邦成立于2009年,专注于汽车贴膜及美容装饰服务,核心业务是为高端4S店、4S集团提供汽车精品领域“产品营销施工售后”的一站式解决方案。 公司成立至今已有14年之久,累计服务客户数百家、累计服务车辆百万台次,口碑…

windows结束explorer进程后桌面白屏解决

背景 结束进程时一不小心一起删掉explorer.exe ,这个文件结束桌面就一片白 , 解决: 不要关机,同时按键盘上ctrlshiftesc ,重新进入任务管理器,接着点“进程”选项,按左上角文件选项,进入下拉菜单…

2023年Java核心技术面试第二篇(篇篇万字精讲)

目录 四. 强引用,软引用,弱引用,幻象引用之间的区别? 1.前言 2.强引用 2.1 强引用赋值为null 2.2 超过了引用的作用域 2.2.1 描述: 2.2.2 作用域内: 2.2.3 不在作用域内: 3. 软引用(SoftRefere…

助力工业物联网,工业大数据之服务域:服务器性能监控Prometheus及项目总结【三十五】

服务器性能监控Prometheus及项目总结 01:目标 服务器性能监控工具 整体作为了解实现部署安装以及监控构建 项目总结 需求分析、技术架构数仓设计:主题划分、分层设计、维度设计优化、问题、数据量及集群规模简历模板 02:监控需求及常见工…

Cat(6):API介绍—Metric

Metric 用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟。 # Counter Cat.logMetricForCount("metric.key"); Cat.logMetricForCount("metric.key", 3); # Duration Cat.logMetricForDu…

java学习004

常用数据结构对应 php中常用的数据结构是Array数组,相对的在java开发中常用的数据结构是ArrayList和HashMap,它们可以看成是array的拆分,一种简单的对应关系为 PHPJAVAArray: array(1,2,3)ArrayListlArray: array(“name” > “jack”,“…

通过请求头传数据向后端发请求

axios (get post请求、头部参数添加)傻瓜式入门axios_axiospost请求参数_web_blog的博客-CSDN博客

【第八讲---视觉里程计2】

在图像中提取特征点并计算特征描述,非常耗时 通过计算描述子距离在不同图像中寻找特征匹配,也非常耗时 利用通过匹配点信息计算相机位姿,没什么问题 我们可以采用以下方法进行改进: 光流:通过其他方式寻找匹配点直接法…

原型对象的简单了解

在前面学习java有一个概念叫做继承,方便我们对父类方法、变量等的调用。对前端的学习我们需要让对象可以访问和继承其他对象的属性和方法,就需要了解原型对象,以及原型链。 一、原型 构造函数通过原型分配的函数是所有对象所共享的。每一个构…

SpringBoot Vue 微人事(十)

职位管理前后端对接问题解决 因为mysql字段关联其他表,进行约束了,删除不了的,就报未知错误是不合适的 需要在后端写一个全局异常类 删掉了MySQLIntegrityConstraintViolationException这个异常类才能导包,能用 RestController…

AutoSAR系列讲解(深入篇)13.6-Mcal Mcu时钟的配置

目录 一、EB的Mcu模块结构 二、时钟的配置 对Mcu的配置主要就是其时钟树的配置,但是EB将GTM、ERU等很多重要的模块也都放在了Mcu里面做配置,所以这里的Mcu是一个很庞大的模块, 我们目前只讲时钟树的部分 一、EB的Mcu模块结构 1. 所有的模块都基本上是这么些配置类别,Mc…

Spark 图计算ONEID 进阶版

0、环境信息 本文采用阿里云maxcompute的spark环境为基础进行的,搭建本地spark环境参考搭建Windows开发环境_云原生大数据计算服务 MaxCompute-阿里云帮助中心 版本spark 2.4.5,maven版本大于3.8.4 ①配置pom依赖 详见2-1 ②添加运行jar包 ③添加配置信…

SAP SQL/CDS新功能货币汇率转换CURRENCY_CONVERSION( p1 = a1, p2 = a2, … )

1. 示例 PARAMETERS: p_waers TYPE mseg-waers OBLIGATORY DEFAULT USD.SELECT SUM( currency_conversion( amount a~hsl, "转换的金额source_currency b~isocd, "源货币target_currency p_waers, "目标货币exchange_rate_dat…

ClickHouse(二十一):Clickhouse SQL DDL操作-临时表及视图

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

Bean 作用域、生命周期和Spring执行流程

文章目录 Bean作用域问题案例分析公共 BeanA 用户使用时修改B 用户使用时原因分析 作用域定义Bean 的6种作用域singletonprototyperequestsessionapplicationwebsocket 设置作用域 Spring 执行流程1、启动容器2、Bean 初始化3、注册Bean对象到容器中4、装配Bean属性 Bean 生命周…

【C++11新特性】右值引用和移动语义

文章目录 1. 左值与右值1.1 左值与右值对比1.2 左值引用与右值引用 2. 右值引用的使用场景2.1 左值引用的短板2.2 右值引用和移动语义2.3 右值引用对左值的引用 3. 完美转发3.1 万能引用3.2 完美转发保持值的属性 1. 左值与右值 1.1 左值与右值对比 左值的概念 左值是一个表示…

13 MySQL

文章目录 MySQL基本使用安装RDBMS使用Navicat新建数据库新建查询--即代码运行的地方运行代码表的操作 命令行连接数据完整性数据类型约束 SQL的基础语法特性:SQL语句的分类DDL库管理 DDL表管理:DML(增删改)新增删除更新 DQL(查)DQL基础查询as 取别名消除…

Java查看https证书过期时间(JKS,CERT)

在这里需要使用X.509 证书的抽象类 X509Certificate 。此类提供了一种访问 X.509 证书所有属性的标准方式。 这些证书被广泛使用以支持 Internet 安全系统中的身份验证和其他功能。常见的应用包括增强保密邮件 (PEM)、传输层安全 (SSL)、用于受信任软件发布的代码签名和安全电…

MongoDB 数据库

目录 一、概述 二、相关概念 三、特性 四、应用的场景 五、安装及配置文件操作 一、首先配置好环境 二、安装 三、查看端口号 四、查看配置文件 五、查询已安装的软件包 六、树状图解析 六、默认数据库(默认有admin、local、config三个) 一…

Java后端开发面试题篇——Redis

Redis的数据持久化策略有哪些 RDB的执行原理? bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术: 当主进程执行读操作时,访问共享内存…