Jenkins简说

Jenkins是一个用java编写的开源持续集成工具,它提供了软件开发的持续集成服务,支持很多主流软件和配置管理工具与其配合实现软件配置管理和持续集成功能。Jenkins作为一个运维行业内用途最为广泛的持续集成工具,它将传统意义上的运维工作与开发工作完美地结合在一起。作为一个运维人员,你可能需要编写很多脚本,执行很多命令,但如何去管理、审计这些脚本,以及如何在数以万计的服务器中和同事协同配合完成一项工作,则是目前我们需要考虑的问题。如果你仅仅限制于command line(命令行),那以后无论遇到任何突发情况,你将疲于奔命,因为你是人不是机器。虽然你可以知道你写的脚本在哪里起作用,在哪里执行实现了什么功能等,但是你手里没有一套完整的系统去管理和让别人了解你日常工作的内容,可能对于别人来说你的工作就是一个黑盒。Jenkins的出现彻底打开了这个黑盒,可以让运维人员和开发人员可以协同工作到一起,进入到一个白盒之中,它在运维工作中起到的是承上启下的作用。首先Jenkins的前台界面方便我们能够直观的收集到我们执行的job所有相关的信息,而且它能够作为一个Pipeline将我们开发周期中各个环节利用stage组合到一起,无论你选择的是sonar(代码质量检查工具),还是Maven/Ant(编译打包工具),还是gitlab/github(版本控制系统),还是Ansible/Saltstack(产品部署工具),Jenkins都能将我们所用到的这些工具串联成一个完整的框架,最终实现一个高效的、可扩展的、全自动部署流程平台。后面会介绍Jenkins的优势及应用场景,Jenkins在安装过程中的配置,freeStyle和Pipeline形式的脚本构建,Pipeline语法架构,以及日常学习工作中会遇到的代码抓取,编译打包,部署工具的集成运用。

Jenkins的优势和应用场景

Jenkins的优势

Jenkins的优势有以下几点:1、主流的运维开发平台,兼容所有主流开发环境。Jenkins是一个主流的运维开发平台,它可以将我们平时开发,测试,部署,基础运维浓缩到每一个Job(任务)当中,配合其强大的兼容性可以匹配目前大中小公司中所有的开发环境。无论你使用的是Linux下的CentOS、RedHat、Ubuntu、Debian、MacOS还是Windows平台,又或者是Docker虚拟机,Jenkins都可以在这些平台下搭建Jenkins系统,这样Jenkins就能完全涵盖我们所有的主流开发环境,保证不同的而开发环境都能够在Jenkins上运转;2、插件市场可与海量业内主流开发工具实现集成。Jenkins内建强大的插件平台,能够与海量业内主流开发工具实现集成,这样便于将不同类型的数据在开发工具间调用处理。Jenkins之所以称之为持续集成系统工具,就在于它能够使用其内建强大的插件市场下的集成插件,与主流的开发工具实现系统工具间的数据调用,帮助我们可以将不同的工具的功能通过API或者命令行的形式,在Jenkins下去运转执行。举个例子来说,我们可以调用gitlab或者github的插件去与其进行git的数据交互,实现克隆,抓取,推送等操作。你可以利用sonar插件给Jenkins传入你的代码仓库地址,在sonar系统实现静态代码扫描,最终生成的报告可以检测出代码的语法是否符合规范,是否有Bug缺陷等,有助于开发人员提高代码质量。你还可以利用Maven插件,通过传入对应的参数,实现对代码的编译,测试,打包,并最终上传到你的代码仓库。3、Job为配置单位与日志管理,使运维与开发人员能够协同工作。Jenkins以Job为配置单位,以及其日志管理,打开了不同团队之间的黑盒,使运维与开发人员能够协同工作。Jenkins的Job工作模式及其日志管理功能打开了以前开发和运维之间无法逾越的鸿沟,所有人都可以通过对某一Job的任务的操作配置,得到自己想要获取的信息。作为开发或者测试人员,在Jenkins这个平台中你无须关注如何搭建这个平台,以及Job配置如何部署实现,你只需要将你项目所需的参数传给Jenkins下对应于你项目的具体Job,Jenkins就会帮助你去完成所有的部署,这样就能让开发与测试人员将更多的时间放到项目代码的实现和项目测试当中,不需要花费额外的时间去做部署工作。如果你是运维工作人员,那你就可以去关注具体的基础平台的搭建维护工作,通过监控Jenkins系统的相关指标,保证Jenkins在一个健康良好的状态下运转,以及关注项目配置,部署工作中出现的权限、参数配置、工具集成调用等问题,你无需过多的关注代码层面的问题,最终让不同岗位的人各司其职,共同在这个平台下完成我们项目开发周期中的所有工作;4、权限管理划分不同Job不同角色。Jenkins严谨的权限管理功能充分划分了每个人在开发周期内对每一个Job的不同角色。我们可以通过设定不同用户在登录系统后具有不同的权限。举个例子来说,开发与测试人员只能有Job任务build和查看日志的权限,从而对代码进行日常的测试部署操作;运维人员在开发人员的基础上,具有对Job任务的写入权限,从而进行日常的任务编写,这样就能保证大家不会越权去操作别人的任务,进而提高项目的安全性。5、强大的负载均衡功能,保证项目可靠性。Jenkins强大的负载均衡功能可以让Job游走在Jenkins集群当中,保证在具体开发过程中的可靠性。Jenkins不仅仅是一个独立的系统,它可以在创建后,作为一个Master节点,然后衍生出若干个Salve子节点,从而组合在一起,成为一个Jenkins集群。这个集群的优势就在于我们可以将Job任务随机或者手动指定到任意一个Master或者Slave节点上去执行,最终实现强大的负载均衡功能,以保证项目的可靠性。

Jenkins的多语言兼容性和强大的插件安装平台,保证它集合可以适合我们所有的主流软件测试环境与生产环境。无论你作为一个开发人员想部署一个Java、Python、PHP、Ruby等环境,还是作为运维人员去集成sonar(代码质量检查工具),TESTLINK(测试工具)去测试代码或者生产测试报表,Jenkins都会给我们不同相关开发人员或者测试人员提供一个较为开放的平台,去完成我们的工作。不需要像传统使用command line方式去执行程序,我们可以直接在Jenkins平台上就完成我们所有集成部署工作,实现我们全平台,全语言,全环境无缝链接的应用场景。

Jenkins的安装与配置

安装前的准备工作

准备一台虚拟机,我给他分配的IP地址为192.168.2.133,之前我们Gitlab和Ansible都安装在一台虚拟机上,IP为192.168.2.131

第一步,添加jenkins的yum仓库源:

1
2
# 下载jenkins的yum源到/etc/yum.repos.d/jenkins.repo目录下
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo

如果提示wget命令不存在则需要先安装wget,使用命令为:

1
yum -y install wget

之后重新执行上述命令,添加完后,使用下面的命令来导入jenkins的key,用来验证yum仓库的安全性:

1
2
# 导入jenkins的key,用来验证yum仓库的安全性
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

第二步,确认jenkins主机中安装了JAVA8.0及以上版本。首先使用java -version查看本机java版本,如果没有请先使用yum -y install java来安装java。

1
2
3
4
[root@jenkins ~]# java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

第三步,关闭系统防护。请依次执行下面的一系列命令:

1
2
3
4
5
systemctl stop firewalld  #关闭firewalld防火墙
systemctl disable firewalld # 禁用防火墙开机启动服务
vi /etc/sysconfig/selinux # 设置selinux值为disabled
reboot # 重启系统
getenforce # 检查selinux策略是否已为disabled状态

Jenkins的安装步骤

第一步,在虚拟机内执行下面的命令开始安装jenkins的最新版本(jenkins的安装比较慢需要一定时间请耐心等待):

1
2
# 安装jenkins
yum install -y jenkins

第二步,创建Jenkins系统用户。这里设置deploy用户为Jenkins系统用户,请按照下面的命令执行:

1
2
# 创建一个deploy用户对应jenkins
useradd deploy

第三步,更改Jenkins启动用户与端口。你可以使用vim /etc/sysconfig/jenkins命令来修改jenkins配置文件,修改以下信息:

1
2
JENKINS_USER="deploy"
JENKINS_PORT="8080"

第四步,更改jenkins的lib/log/cache目录的属主和权限。你可以使用下面的命令来完成相应的操作:

1
2
3
4
5
6
7
# 修改jenkins的lib目录的属主和权限
chown -R deploy:deploy /var/lib/jenkins
# 修改jenkins的log日志的属主和权限
chown -R deploy:deploy /var/log/jenkins
# 修改cache下的jenkins的属主和权限
chown -R deploy:deploy /var/cache/jenkins

第五步,启动jenkins。你可以使用service jenkins start命令来启动Jenkins,当然了也可以使用service jenkins stop来关闭Jenkins服务,你还可以使用lsof -i:8080来查看8080端口的使用情况(如果提示没有lsof可以使用yum -y install lsof命令来进行安装。)

第六步,修改Windows本地的hosts文件,使得你可以通过域名来访问(路径一般为C:\Windows\System32\drivers\etc\hosts),往里面新增一条DNS记录,前面为Jenkins部署所在的虚拟机IP,这样你就可以使用jenkins.example.com域名来访问它了:

1
2
192.168.2.133	jenkins.example.com

第七步,打开浏览器,在地址栏中输入jenkins.example.com:8080来访问Jenkins,就会出现下面的页面信息:

其实这个/var/lib/jenkins/secrets/initialAdminPassword目录中存放的就是管理员的初始密码。你回到Jenkins所在的虚拟机,使用cat /var/lib/jenkins/secrets/initialAdminPassword命令来输出信息:

然后将这个输出来的信息放到上面的密码框即可,点击回车。然后选择左侧的“安装推荐的插件”进行安装,之后界面进入推荐插件安装页面:

当所有推荐的插件安装完成时,会进入创建第一个管理员用户页面:

点击确定并完成,完成配置工作:

如果你在上述点击确定后没有及时跳转至Jenkins首页,而是出现页面停留在空白页面的情况,那么你就需要进入到这里需要进入http://192.168.2.133:8080/pluginManager/advanced页面,然后修改下面的升级站点的URI:

注意升级站点选择:http://updates.jenkins.io/update-center.json,然后使用service jenkins restart命令来重启jenkins服务,之后登陆,就能进入到首页。不顾这个问题一般是在旧的Jenkins版本上才有,我这里使用的是jenkins.noarch 0:2.222.3-1.1 版本就没出现这个问题。

Jenkins操作界面介绍

下面是Jenkins的首页,如图所示:

序号1:新建Item,表示你可以通过点击它来创建一个新的Jenkins Job任务;序号2:用户列表,表示你可以在里面创建Jenkins用户;序号3:构建历史,表示你可以查看所有build创建的log记录;序号4:Manage Jenkins,表示你可以管理与系统相关的配置信息;序号5:My View和序号8:New View,表示你可以自定义一个dashboard,也就是自定义视图界面。序号6:凭证,表示你可以在里面添加git密码,ssh公钥等信息,它作为一个凭据进行保存;序号7:Lockable Resources,表示一些被锁住的资源;序号9:构建列表,用于显示我们构建的所有build的队列,当我们有若干个任务需要去执行的时候,那么此时所有的任务都会在这个队列中进行等待;序号10:构建执行状态,表示所有任务的执行状态列表,注意都是正在执行的任务。然后你可以点击右侧的“开始创建一个新任务”来创建若干个任务队列,这样你就能在这个Web界面上管理所有Jenkins任务列表。

接下来点击Manage Jenkins部分,也就是序号4的信息,进入到系统管理页面:

Configure System用来定义Jenkins的一些全局参数配置,例如系统消息,系统消息格式,以及系统内置的Git、Gitlab、Shell等信息。Configure Global Security是全局安全配置,用来配置全局的账户安全,如是否允许用户注册等,我们最常使用的就是项目矩阵授权策略:

在这里面可以配置每一个Jenkins用户对每一个Job任务的读写,build,视图查看等权限。

ManagerPlugin管理插件,其实就是Jenkins的插件市场,在这里面你就可更新或者安装第三方的插件。

System Log系统日志,你可以在这里查看Jenkins日志信息,从而获取Jenkins的实时运行数据。当Jenkins运行出现问题的时候就可以在这里进行debug追踪,找到发送的问题:

System Information系统信息,在这里面就可以查看到本机的环境信息,插件列表等:

Load Statistic负载统计,你在这里可以通过查看动态的坐标图,按照短、中、长三个时间间隔去查看当前Jenkins服务器的任务负载情况,从而获取到Jenkins的健康状况:

Manager Users管理用户,你可以在这里面管理、创建、删除用户: