【转】Jenkins详细教程

    最近花了一段时间研究jenkins这个工具。所以写下这篇文章,算是当做记录吧!

一、jenkins是什么?

        Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(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。基于这个插件的权限管理设置请参考这篇文章:http://blog.csdn.net/russ44/article/details/52276222,这里不作详细介绍。

 

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

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

 

344人点赞

 

CI/CD

 



作者:哥本哈根月光
链接:https://www.jianshu.com/p/5f671aca2b5a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

拼接符 防注入正则校验_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)

1、前言Apache Kylin是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据。近日,百度云安全团队监测到Apache官方发出了一个漏洞通告,披露了Apache kylin多版本存在命令注入漏…

can使能上拉 gpio_IMX6ULL 的 GPIO 操作方法

来源:百问网作者:韦东山本文字数:1652,阅读时长:4分钟CCM: Clock Controller Module (时钟控制模块) IOMUXC : IOMUX Controller,IO 复用控制器 GPIO: General-purpose input/output,通用的输入…

【转】.NET 的 WebSocket 开发包比较

转载于http://www.oschina.net/translate/websocket-libraries-comparison-2 编者按 本文出现在第三方产品评论部分中。在这一部分的文章只提供给会员,不允许工具供应商用来以任何方式和形式来促销或宣传产品。请会员报告任何垃圾信息或广告。 Web项目常常需要将数…

vb checkbox选中和不选中_UE4 4.23 RetainerBox 选中框位置不正确

Bug表现在UE4 4.23版本,实现自定义控件时,继承了RetainerBox,发现当内部包裹子控件时,先编辑器面板选中子物体,发现选中位置有偏移。位置偏移当窗口缩放时,选中框位置发现当窗口最小化时,偏移位…

去哪查阅ISO国际标准?

ISO官网 访问ISO官网,不需要翻墙,只要懂点英文就行。 ISO官网地址:https://www.iso.org/(可进行全面了解、购买付费内容) ISO部分公开标准下载地址:https://standards.iso.org/ittf/PubliclyAvailableSt…

【转】开源的C# websocket-sharp组件解析

下面我们介绍一款WebSocket组件websocket-sharp的相关内容。 一.websocket-sharp组件概述 websocket-sharp是一个C#实现websocket协议客户端和服务端,websocket-sharp支持RFC 6455;WebSocket客户端和服务器;消息压缩扩展;安全连接…

java异或_JAVA面试必备之HashMap必会点

今天我们就面试会问到关于HashMap的问题进行一个汇总,以及对这些问题进行解答。1、HashMap的数据结构是什么?2、为啥是线程不安全的?3、Hash算法是怎样实现的?4、HashMap是如何处理Hash碰撞的?5、增加元素的方法是怎么…

对分查找的最多次数_「剑指offer题解」数组中出现次数超过一半的数字

关注我——个人公众号:后端技术漫谈我目前是一名后端开发工程师。主要关注后端开发,数据安全,网络爬虫,物联网,边缘计算等方向。原创博客主要内容Java知识点复习全手册Leetcode算法题解析剑指offer算法题解析SpringClo…

rabbitmq导出队列_消息队列BCMQ在大云运维管理平台BCDeepWatch中的应用

友情提示:全文约2600字,预计阅读时间12分钟摘要消息队列作为重要的中间件,广泛用于分布式系统中各子系统间的异步解耦;本文主要介绍了大云消息队列中间件BC-MQ在BC-DeepWatch中的应用案例。一、消息队列应用场景简介消息队列是分布…

【编译原理】如何编写BNF?

此篇文章承接上一篇:【编译原理】理解BNF 前言 理解了BNF,就能实现代码解析了吗?还有点早,因为理解了BNF,还要会写BNF。实际上,BNF实现有固定的模式,也有现成的工具,比如可以使用ya…

python 当前时间减一个月_python排序了解一下

排序是每个开发人员都需要掌握的技能。排序是对程序本身有一个全面的理解。不同的排序算法很好地展示了算法设计上如何强烈的影响程序的复杂度、运行速度和效率。今天的文章和谈谈大家都熟悉的各种排序使用 Python 如何实现,废话就不多说啦,开干&#xf…

【转】4.1触碰jQuery:AJAX异步详解

传送门:异步编程系列目录…… 示例源码:触碰jQuery:AJAX异步详解.rar AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。它并非一种新的技术,而是以下几种原有技术的结合体。 1) 使…

QStackedWidget实现自适应紧凑布局

前言 本文提出了一种使QStackedWidget尺寸根据内容自适应调整的解决方法。 问题提出 我们知道,QStackedWidget可以包含多个可切换的子窗口。多个子窗口的高度不一样时,此时将QStackedWidget放在一个垂直布局中,所有子窗口会保持和最高的子…

linux查看tcl版本_查看Linux内核版本的方法有几个?你也是这样操作吗?

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言内核是操作系统的核心组件。 它管理系统的资源,是计算机硬件和软件之间的桥梁。您可能因多种原因需要确切知道GNU / …

【转】4.2使用jQuery.form插件,实现完美的表单异步提交

传送门:异步编程系列目录…… 示例下载:使用jQuery.form插件,实现完美的表单异步提交.rar 抓住6月份的尾巴,今天的主题是 今天我想介绍的是一款jQuery的插件:Jquery.form.js 官网。 通过该插件,我们可以非常…

什么方式可以通过影子系统传播恶意代码_将恶意代码隐藏在图像中:揭秘恶意软件使用的隐写术...

概述本周,许多Facebook用户都会发现,一些用户发布图片上出现了原本应该隐藏的图像标签。由此可以证明,图像可以携带大量表面上不可见的数据。实际上,Facebook和Instagram所使用的图片元数据与恶意攻击者制作的特制图像相比显得非常…

无法嵌入互操作类型 请改用适用的接口_西门子COMOS软件开发定制学习7-嵌入谷歌浏览器内核...

首先需要声明的是,本篇并非COMOS实用案例,只是希望借此让大家了解,如何使用微软的WPF和C#语言开发COMOS插件。首先看下效果图功能说明:拖拽COMOS设备至定制的浏览器,自动根据设备的名称和其制造商参数值,搜…

【转】C#与C++的发展历程第一 - 由C#3.0起

C#5.0作为第五个C#的重要版本,将异步编程的易用度推向一个新的高峰。通过新增的async和await关键字,几乎可以使用同编写同步代码一样的方式来编写异步代码。 本文将重点介绍下新版C#的异步特性以及部分其他方面的改进。同时也将介绍WinRT程序一些异步编…

【转】5.2高性能IO模型浅析

服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO&#xff0…

vba 修改文本文档 指定行_VBA程序报错,用调试三法宝,bug不存在的

如果把VBA比作一门刀法,那么经过前面内容的操练,大家已经掌握了很多实用的招式。如果我们在刀法招式的基础之上,再掌握更多的“磨刀”心法,那么我们的刀用起来才会又好又快。所以今天主要和大家分享——VBA“磨刀”心法之程序调试…