二、CI/CD是什么?

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

CI

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

jenkinsphpJenkins具体教程 jQuery

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的思维导图