Jenkins持续集成实践-(1)部署及配置

/ 0评 / 1

持续集成(CI:Continuous integration)是任何多人协作开发的团队要解决的问题,相较于在本机上编译打包再手工发布到服务器的方式,使用提供了持续集成服务的系统,首先可以节省为每个开发人员搭建编译打包环境的烦恼,其次避免服务器信息泄露的风险,接着完善的权限管理及操作日志更便于项目的管理,最后图形UI操作界面让不懂开发的用户也能操作。所以持续集成系统的引入,是团队持续集成建设的重要一环。

之所以选择Jenkins作为持续集成系统,首先是因为以前在网易的时候团队就是用的是这个系统,也通过这个系统才知道持续集成这个概念;其次它在国内使用还是相对广泛,这也降低了团队成员入门的门槛;最后就是它是开源免费的。

Docker - 系统部署

docker容器的出现给服务器应用部署带来了极大的便利,所以本次Jenkins的部署主要是通过docker来完成。

centos服务器默认是没有安装docker,所以我们先把docker安装上。docker有分CE(Community Edition:社区版本)和EE(Enterprise Edition:企业版本)版本,一般选择CE版本就可以了。为了保证安装教程的有效性,安装步骤还是让大家直接参考官方的文档来做比较妥当:

https://docs.docker.com/install/linux/docker-ce/centos/

要注意的是,截止此文撰写的时间,docker的安装说明是针对centos7以上的版本,centos6是不适用上面的安装流程。

docker安装完后就是jenkins镜像的安装,直接运行如下命令:

docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts

安装完成后如上图所示,通过查看端口可以看到,8100已经有进程在使用了,那就代表jenkins已安装并启动成功了。那么如果要进入jenkins的容器中安装一些其它包供jenkins使用的话,则可以通过以下命令进入容器中

docker exec -it --user root jenkins bash

另外要注意其内部是用apt进行包管理的,而不是yum。

Jenkins安装配置

安装及配置过程网上也有很多人写过,我就不再重复写了,大家我可以直接参考以下文章去进行初始化配置就可以了:

如何使用 Docker 安裝 Jenkins ?

插件安装

Jenkins系统提供了丰富的第三方插件来帮助用户完成复杂的集成任务。而除了在初始化配置时系统已经默认安装的一些必要插件外,用户还可以通过在:“系统管理(Manage Jenkins)”-“管理插件(Manage Plugins)”-“可选插件(Available)”中,选择你要额外安装的插件即可(PS:有些插件安装完后要重启才能生效的)。

界面汉化(可选) - Locale plugin

是否需要界面汉化这个主要看团队成员的需求,如果只是面向开发团队的话,我觉得还是用纯英界面会比较好。

通过插件管理界面的可选插件标签页找到“Locale plugin”插件并安装,安装好后进入:“系统管理(Manage Jenkins)”-“系统设置(Configure System)”-“Locale”

如截图圈出来所示填写配置即可,然后点击保存配置后整个系统界面就会切换到中文界面。虽然汉化也并不完整,但聊胜于无。

用户视图(View)

视图主要是用于给任务(Job)分类用,用户进入界面后的首页默认显示的就是你当前所有的视图情况。而左边侧边栏的“我的视图”其实就是将你所有视图的任何合并起来显示而已。区别不是太大。

通过侧边栏底下的“新建视图”来创建新的视图,在创建界面的第一步中,需要选择你的创建方式:

一般情况选“简单视图”,然后在下面的截图圈出的区域里选择你所需的已创建任务

点击保存即可。又或者在首页选择相应的视图后点击如下图所示截图的链接创建任务也可以:

权限安全

一般如果要做任务权限控制的话,都要通过“Role-based Authorization Strategy”这个第三方插件来进行,默认的矩阵权限只能控制功能,粒度不能具体到任务。但通过该插件可以通过创建角色并配合正则表达式来控制用户可访问的任务。

首先是安装插件,安装好后再在:“系统管理(Manage Jenkins)”-“全局安全配置(Configure Security)”-“授权策略”中选择“Role-Based Strategy”选项。

然后再进入插件的配置页面进行角色创建及用户角色分配,所以我们先创建角色:“系统管理(Manage Jenkins)”-“Manage and Assign Roles”-“Manage Roles”

角色分了三类,我们只需要关注Global Roles(全局角色)和Project Rolese(项目角色)即可。前者是用于创建功能权限角色,后者则是创建任务权限角色。其中要特别注意任务权限角色创建时是通过“Pattern”字段来过滤角色可访问的任务。换句话说,创建任务时,命名一定要规范,这样便于通过此插件的正则匹配来过滤对应的任务。

角色配置好后,就是给用户分配角色:“系统管理(Manage Jenkins)”-“Manage and Assign Roles”-“Assign Roles”

通过Global Roles和Item Roles两项的表头可以看到我们刚刚创建的角色。接着可以在对应的输入框中,填写用户的账号(PS:是用户登录账号,不是用户昵称,否则会提示用户找不到导致权限无法正确分配到用户上)。

钥匙管理(Credentials)

jenkins的这个概念还是很有必要理解一下,因为jenkins是一个持续集成系统,这就势必需要访问很多外部系统。那么外部系统的访问就会涉及到登录认证,而这些认证信息(用户名及密码/证书)就是通过credentials进行统一管理,所以credentials可以理解为钥匙。

创建钥匙前,其还要理解一个概念就是“domian”,其实简单点就是钥匙分类:

但特别要注意其中的“specifications”(规范)选项,其应该是用于限定使用该钥匙的访问源,其可配置端口和host等,这样就可以进一步控制钥匙的使用范围。接下来是选择相应的domain后创建钥匙:

第一个选项是Kind,这个是配置钥匙的类型,是“账号+密码”型还是“证书”型等,具体就需要看你的目标系统的认证方式:

其次是要注意scope作用域,就是该钥匙是用于全局(Global,包括任务job)还是系统(System)自身(Jenkins)使用的,后者更强调系统自身运作所需要用到的钥匙,如jenkins要用到邮箱钥匙来发送邮件通知,那么这个钥匙就最好放在System作用域下了。

钥匙创建好后,就通过支持credentials管理认证信息的插件或系统功能来访问这些钥匙了。例如后续另一篇文章介绍到的SSH Plugin

结语

通过上文对jenkins的简单入门介绍,我相信大家对jenkins系统各个模块有个大体的了解,那么接下来会介绍一个持续集成比较常见的场景:远程执行脚本

参考

发表评论

电子邮件地址不会被公开。 必填项已用*标注