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