Jenkins学习笔记详细

最近接触了jenkins这个东西,所以花点时间了解了下。它可以在代码上传仓库(如github,gitee,gitlab)后,在jenkins(一个网站界面)中通过获取代码仓库中最新代码,进行自动化部署,而省去手动打包、上传服务器、部署这一系列步骤,非常方便。

一、jenkins是什么?

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

二、CI/CD是什么?

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

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

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

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

登录Jenkins, 点击左侧的新建,创建新的构建任务。
在这里插入图片描述

跳转到如下界面。任务名称可以自行设定,但需要全局唯一。输入名称后选择构建一个自由风格的软件项目(其他选项不作介绍)。并点击下方的确定按钮即创建了一个构建任务。之后会自动跳转到该job的配置页面。
在这里插入图片描述
下图是构建任务设置界面,可以看到上方的几个选项"General", “源码管理”, “构建触发器”,“构建环境”, “构建”, "构建后操作"。下面逐一介绍。
在这里插入图片描述

1.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 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"中配置文件名。
在这里插入图片描述
fileset dir 指定单元测试文件所在路径,include指定包含哪些文件,支持通配符匹配。当然也可以用exclude关键字指定不包含的文件。
在这里插入图片描述

四、进行jenkins project 构建

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

五、构建结果说明

构建状态

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

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

Failed红色:构建失败。

Disable灰色:构建已禁用

构建稳定性

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

构建历史界面

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

六、jenkins权限管理

由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin。基于这个插件的权限管理设置请参考这篇文章:http://blog.csdn.net/russ44/article/details/52276222,这里不作详细介绍。

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

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

在这里插入图片描述

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

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

相关文章

c语言程序设计华北电力大学,2016年华北电力大学电气与电子工程学院C语言程序设计(同等学力加试)考研复试题库...

一、选择题1. 有以下程序程序运行后的输出结果是( )。A.24B.44C.22D.46答:B【解析】p 是int 类型的指针,指向数组a 的首元素;k 的int*类型的指针,指向int*变量先执行p,p 指向a 中第二个元素,然后取值&#…

Form Data与Request Payload,你真的了解吗?

前言 做过前后端联调的小伙伴,可能有时会遇到一些问题。例如,我明明传递数据给后端了,后端为什么说没收到呢?这时候可能就会就会有小伙伴陷入迷茫,本文从chrome-dev-tools(F12调试器)中看到的F…

c语言运行程序导出表格,C语言--输出打印表格

//// invest.c// day05//// 打印一个投资利率表// 打印100元在指定年份内投资,按相应回报率计算收益 ,程序输出如下:// 利率: 6%年份:5//// Year 6%7% 8% 9% 10%// 1 106 107 108 109 110// 2 112.36 114.49 116.64 118.81 121// 3 119.10 122.50 125.97…

Java对象复制或拷贝之BeanUtils.copyProperties() 用法,一行语句实现对象间快速复制

java对象复制或拷贝之BeanUtils.copyProperties() 用法,一行语句实现对象间快速复制 即 BeanUtils.copyProperties(源对象, 目标对象); 使用注意事项: 1.BeanUtils是org.springframework.beans.BeanUtils,不是org.apache.commons.beanutils.…

c语言c98标准,1.3.2 C语言标准

1.3.2 C语言标准Dennis Ritchie和Brian Kernighan的经典著作《C程序设计语言》(Prentice Hall)自1978年***出版后,一直扮演着非正式的C语言规范的角色。这个版本的C语言俗称K&R C。C语言很快替代了Basic语言和其他语言,成为微型计算机编程的通用语言…

计算机网络知识点复习

基础 1.说下计算机网络体系结构 计算机网络体系结构,一般有三种:OSI 七层模型、TCP/IP 四层模型、五层结构。 简单说,OSI是一个理论上的网络通信模型,TCP/IP是实际上的网络通信模型,五层结构就是为了介绍网络原理而折…

单链表插入元素 注释 c语言,数据结构之无头单链表的相关练习题——C语言实现(详细注释)...

本文中所用到的相关链表操作实现均在我上篇博客中:https://blog..net/haoziai905/article/details/870992871.删除无头单链表的非尾结点这道题的重点就在于最后的非尾结点上,既然是非尾结点,则说明其下一个结点必定不为空。而我们通常所使用的…

n个1组成的整数能被2013整除c语言,求大神解算法,“编写程序,求n至少为多大时,n个1组成的整数能被2013 整除。”...

编写程序,求n至少为多大时,n个1组成的整数能被2013 整除。使用python黑科技:i 1while int(1 * i) % 2013:i 1print(i)不使用黑科技:i s t 1while s % 2013:i 1t t * 10 % 2013s (s t) % 2013print(i)而事实上可以从数论的角度看。20133*11*61&a…

Java基础知识点复习

转载:https://mp.weixin.qq.com/s/M-6RSRcRd3X93cR7VXpanw Java概述 1.什么是Java? Java是一门面向对象的编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和…

c语言 求2到100的素数,2是素数吗(c语言输出100以内素数)

2是质数吗?除了1和本身外,不能被其他任何自然数整数的自然数。又叫做素数,最小的素数是2,也是唯一的偶质数 100以内的质数共有25个,这些质数我们经常用到,可以用下面的.1不是素数,最小的质数是2…

为什么都说Dubbo不适合传输大文件?Dubbo支持的协议

背景 之前公司有一个 Dubbo 服务,内部封装了腾讯云的对象存储服务 SDK,是为了统一管理这种三方服务的SDK,其他系统直接调用这个对象存储的 Dubbo 服务。用来避免因平台 SDK 出现不兼容的大版本更新,导致公司所有系统修改跟着升级…

中科院C语言应聘机试编程题6,中科院计算所保研笔试+机试+面试经验分享

计算所JDL(先进人机交互)实验室9月10号开始联系计算所导师,12号收到导师的回复,大致意思是老师让我提供三位本校推荐老师的联系方式,又问了是否有读博的打算,让我准备到计算所JDL面试,16号收到了他们的正式通知。老实说…

MySQL group_concat()详解

GROUP_CONCAT(xxx):是将分组中括号里对应的字符串进行连接.如果分组中括号里的参数xxx有多行,那么就会将这多行的字符串连接,每个字符串之间会有特定的符号进行分隔。 对应的语法格式 # 将分组中column1这一列对应的多行的值按照column2 升序…

c语言编写劫持dll,c语言-----劫持自己02

在上一节 c语言-----劫持原理01 已经叙述了劫持原理,下边正式进入劫持实战1. 需要实现的功能在c语言中system("notepad") 可以打开一个记事本system("mspaint") 可以打开画图工具所以这次我们需要把 可以打开一个记事本 这个功能更改为 在控制…

Java中Runtime类

一、概述 Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。 一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前R…

长春理工大学c语言实验题库,长春理工大学首届趣味心理知识竞赛初赛题库.doc...

长春理工大学首届趣味心理知识竞赛初赛题库长春理工大学首届趣味心理知识竞赛初赛题库心理知识简述1.心理学概念心理学是研究人的心理活动及其发生、发展规律的科学。人的心理是以不同的形式能动地反映客观事物及其相互关系的活动。人的心理活动包括有紧密联系的两个方面&#…

在Java中调用Python

写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题&#…

android 导航动画,安利一个Android导航库

SlidingRootNav这是一个像DrawerLayout一样的抽屉式的导航库,这个库实现的抽屉在content view的下层,滑动之后,才能看到相应的导航页使用Gradle添加依赖compile com.yarolegovich:sliding-root-nav:1.0.2使用说明创建一个 content_view.xml或…

将String集合转为Integer集合的三种方法

第一种方法&#xff1a; List<String> list Arrays.asList("1", "2", "3", "4", "5");// method1 创建一个Integer类型的集合&#xff0c;循环遍历String类型的数组并把数据添加进集合List<Integer> integerLi…

android 界面组件,安卓开发学习周第三篇——Android中的UI组件

原标题&#xff1a;安卓开发学习周第三篇——Android中的UI组件在Android APP中&#xff0c;所有的用户界面元素都是由View和ViewGroup的对象构成的。View是绘制在屏幕上的用户能与之交互的一个对象。而ViewGroup则是一个用于存放其他View(和ViewGroup)对象的布局容器&#xff…