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进行代码(单元)测试、打包。
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: 邮件通知,构建完成后发邮件到指定的邮箱。
以上配置完成后,点击保存。
进行jenkins project 构建
第一次配置好jenkins project之后,会自动触发一次构建。此后,每当有commit 提交到master分支(前面设置的是master分支,也可以设置为其他分支),就会触发一次构建。当然也可以在project页面手动触发构建。点击左边的"立即构建" 手动触发构建。
开始构建或构建完毕后,左下方列出每次构建的链接,点击进入某次构建;
点击左侧的“Console Output”,可查看构建日志,比如
jenkins权限管理
由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin。基于这个插件的权限管理设置请参考这篇文章:http://blog.youkuaiyun.com/russ44/article/details/52276222,这里不作详细介绍。
至此,就可以用jenkins周而复始的进行CI了,当然jenkins是一个强大的工具,功能绝不仅仅是以上这些,其他方面要是以后用到,我会更新到这篇文章中。
其它操作补充
简单讲一下Jenkins构建结果中各种图标的含义
我的主界面有以下构建任务,这里前两列都是图标,第一列为构建的状态
- Successful蓝色:构建完成,并且被认为是稳定的。
- Unstable黄色:构建完成,但被认为是不稳定的。
- Failed红色:构建失败。
- Disable灰色:构建已禁用
第二列天气指示器表示构建稳定性,天气越好表示构建越稳定,反之亦然。其中晴天(太阳标志)代表此项目中所有构建都是成功的,多云转晴(乌云遮挡太阳)代表有构建成功的,也有构建失败的,但是成功率高于失败率.多云天气(一朵乌云标识)代表有成功有失败,但是失败率大于等于成功率,像我的integryWithMsBuild任务,把鼠标放在当前任务的天气图标上,便会显示一个悬浮框
如图示,它是对当前构建状态的详细描述,其有4个构建,其中2个失败.尾部的百分比是成功率百分比,而不是失败率,需要注意.
雷电天气(黑云加上闪电)代表构建全部失败,比如我的MutiSteps任务,把鼠标放在天气图标上,会弹出以下悬浮层:
所有的构建全部失败,此时成功率为零。
下面说一下构建任务的管理:
删除构建记录
我们进入一个构建任务(从主界面点击它的名字)
进入构建任务页会出现上面的界面,大家的如果只有一个构建记录,可以点击左侧的"Build Now"来创建多个构建记录,我的界面是没有"Build now"的,大家不要介意,这是因为我的这个任务是一个定时任务,被关闭了,如果任务处于开启状态就会有"Build Now"选项了.
比如我现相要删除75号构建任务,这里我可以点击任务记录名称后面的三角(大家在界面上看不到三角标识,当你把鼠标光标移动到一个构建记录名称上面的时候,它后面就会出现一个三角标识)出现下面一个下拉菜单
(此处还可以选择编辑该条构建记录的信息,查看该条记录的构建记录等操作,不再赘述)
光标移动到最后一个选项"Delete Build"删除构建,这时候会出现一个提示是否要删除此构建
此时点击Yes按钮便可以删除当前构建了,当然还有一种删除方法就是直接点击构建记录名称,进入它的详细信息界面,然后点击左侧的"Delete Build"
之后问你是否删除,你仔细观察就会发现,这个提示和上面的是一模一样的,其实中上面的点击三角进行的操作和这步操作是一样的,点击三角的删除操作只本步操作的"快捷操作"
这时候你会发现,如果不想删除构建,并没有一个cancel按钮来供取消操作,只有一个yes,此时,你点击左边导航栏里除了删除构建以外的其它按钮都可以取消删除操作的.
删除/禁用构建任务
上面讲了如何删除构建记录,这里讲一下如何删除一个构建任务.其实删除方法类似.如果当前处于构建任务主页面,左侧便会有Delete Project选项:
如果想要禁用一个任务,在这个任务的主面板里面,点击右上角的Disable Project便可以禁用掉当前项目