持续集成系列01-Jenkins入门

前文:

16年开始接触持到续集成工具-Jenkins,从自己摸索到负责全公司的Jenkins搭建和维护工作。很早就想把这过程记录下来,但因一直没抽出时间做这件事。

到今天(20201204)为止,Jenkins已经不算是一个很新颖的工具了,但它能做的事情一直没少过。目前的招牌尤其是QA这一块貌似持续集成已经是个必备技能了。

所以准备出个入门解读帮助大家快速入门,后续会用一个移动端的持续构建来作为实战。

那么接下来我们开始入门,本文的内容大多数来自16年的记录,所以某些截图可能已经过时。

Jenkins是什么?

Jenkins是什么,持续集成又有什么用?我不想去找大篇的官方解释,在我看来,jenkins就是个自动化工具,而且只提供了一半的功能,而剩下的一半就要靠我们自己写脚本去实现了。而且正因为它运行的是脚本,所以我认为整个持续集成+持续发布期间的所有自动化操作,均可以交给Jenkins来做。而持续集成又是什么呢?说到持续集成又得提起敏捷开发模式,敏捷开发提倡的就是快速开发+快速上线+快速抢占市场,所以这期间很多内容就需要我们持续不断去做,而且做好做成自动化。正如我们当年客户端团队引入Jenkins是为了App的自动构建和各自动化脚本的定时执行;后端团队是为了自动发布和环境的自动配置等等。

Jenkins基本信息的介绍(作为第一篇,只介绍些基础信息)

一、准备工作

1.下载jenkins  (官网链接:https://jenkins.io/

2.下载Tomcat (官网链接:http://tomcat.apache.org/) 本文示例tomcat8(当然,也可以利用JDK直接启动Jenkins.jar)

3.下载JDK并配置好环境变量 (官网链接:http://www.oracle.com/):jdk最好是1.5以上,1.5及以下会报各种稀奇古怪的错误并且不支持某些插件,本文示例为jdk1.8

4.下载gradle并配置好环境变量

5.下载git并配置好环境变量

二、安装

1.将下载好的jenkins的war包复制到tomcat的webapps目录下

jenkins初始化:于tomcat/bin/catalina.sh文件正文第一行添加  

export JENKINS_HOME="jenkinsPath"

2.打开浏览器,输入http://localhost:8080/jenkins(默认8080),首次进入jenkins,会看见如图所示的界面(图片是从网上找的,以前自己搭建的时候忘记截图保存了),只要根据红字提示部分的地址去找到密码粘贴进输入框即可,图片展示的是mac,windows系统的地址应该是在C:\Users\dell\.jenkins\secrets里(以页面显示地址为准)

3.输入密码后,会提示你安装插件,选择Install suggested plugins即可 

4.随后会显示下载插件的进程,由于网络或其他原因可能会造成进程卡死的情况发生(不要担心,可以关闭jenkins后再重新进入,jenkins的设置中也可以下载插件)

5.插件安装完之后就会进入到jenkins主页

三、配置

1.工具配置

jenkins主页点击【系统管理】-->【Global Tool Configuration】-->进入Global Tool Configuration页面,在这个页面,我们可以配置git、gradle、jdk、maven、ant······工具

第一条所要做的准备工作也都是为了在这里进行配置

1.1-jdk配置,JAVA_HOME的目录地址是bin目录之前的目录(当然,你也可以选择自动安装,不过当在网络较差的环境下,自动安装这一过程可能会影响打包效率)

1.2-git配置(git已配置了环境变量,Path to Git executable中写git.exe即可)

1.3-gradle配置(同样gradle的GRADLE_HOME的目录地址也是bin目录之前的目录)

在这里如果选择自动安装,那么就要注意下gradle的版本问题,太低的gradle版本会在打包的时候出现各种问题,比如什么找不到jcenter·····

好在gradle可以安装很多个,只要在后面JOB配置中 Invoke Gradle script中注意选择就好(后面会讲这个)

2.系统设置

jenkins主页-->点击【系统管理】-->点击【系统设置】-->进入系统设置页面(放一张大图先!)

2.1 -主目录(所谓的主目录就是指存放jenkins所有文件的地方,不管是工作空间的目录还是构建记录的目录,都是在这个主目录之中,不过一般我们不需要对这个目录进行更改)附上自己的.jenkins截图!

2.2-系统消息(其实系统消息放张截图一看就明白是什么了,系统消息中的内容会出现在jenkins主页,例如我在系统消息中写了“我自己的jenkins”,那么在jenkins主页也一定会出现这句话)

2.3-Maven项目配置(本来是不打算解释这部分的,因为有个别的我也不知道什么意思,而且我本地打包有些功能也用不上也用不上,但是想想还是把知道的都先写上吧!)

2.3.1-执行者数量,执行者数量是什么意思咧?其实就是指并发构建的数量,我们经常会看到公司jenkins 上android job和ios job同时在构建,甚至还有RN job,这个同时构建的数量是有限制的,这个限制就是指这个执行者数量

2.3.2-标记,字面意思,一个标记而已,那么是jenkins中什么东西的标记呢?其实就是jenkins机器名字的标记(比如公司的节点机器,什么android啊,ios啊,ReactNative啊······)这个标记是为了分配节点使用的,后边有机会我们再介绍。

2.3.3-用法(为了大家更容易理解,我呢就打开了用法的下拉箭头,可以看到有两个选择,一个是“尽可能使用这个节点”,另一个是“只允许运行绑定到这台机器的Job”),这个用法就是这个jenkins的执行策略而已

2.3.4-生成等待时间,这个是指在构建之前等待的时间

2.3.5-SCM签出重试次数,看名字就一个感觉:“我靠,这特么是什么意思?”其实就是指拉起代码的时失败的重试次数(不管是svn还是git)

2.3.6-Default view,默认视图

2.3.7-Restrict project naming,限制项目命名,勾选上之后,发现弹出了两个选项,一个是默认,另一个是使用正则表达式进行限制(网上查的),但还是不太懂有什么用!

2.4-全局属性

字面意思上理解,Environment variables是指全局变量,在这里定义的的变量可以在后面的项目构建和发邮件时进行引用,比如我定义了一个android sdk 的全局变量

Tool Locations,指的是全局工具,可以在这里配置ant、maven、git、jdk······工具(当然,我没在这里配置)

2.5-设置时间格式,这个没什么好说的,我也忘记了是不是默认就是这个格式(小伙伴们自己搭建的时候找答案吧)

2.6-jenkins 的url和管理员邮件地址,也没什么好说的(自己设置就好)

2.7-SSH Server,这里可以设置ssl连接时的端口,而且如果你用了ssl连接,那么这里一定不能选禁用,我在这里选的是随机选取

2.10-邮件配置(这可是重头戏啊,之前为了配置好这个邮件,遇到了太多的坑。下面,一个个解释)

2.10.1-SMTP server ,发送邮件的服务器,例如我的:smtp.163.com

2.10.2-Default user Email suffix,这个是指邮箱的后缀(@163.com)

2.10.3-Default Content Type,默认内容类型,这里有两种选择,一种是文本格式(Plain text),另一种是html格式(HTML),喜欢那种格式,小伙伴们自己选择吧

2.10.4-Default Recipients,默认收件人,写上自己的邮箱即可

2.10.5-Default Subject,邮件主题

2.10.6-Maximum Attachment Size,指的是邮件附件的最大值

2.10.7-Default Content,邮件内容,这里是可以引用上面定义的环境变量的参数和插件的一些变量,具体的小伙伴们可以试试。

 

2.11-邮件通知(与2.10配置差不多。就是smtp认证需要注意下,然后端口号需要自己查)

2.12-验证邮箱配置适合OK

勾选上“通过发送测试邮件测试配置”后,便会弹出Test e-mail recipient,然后在输入框中输入邮箱地址,点击【Test configuration】,如果发送成功,那么输入框下就会出现“Email was successfully sent”,如果发送失败,那么输入框下就会飘红,那小伙伴们就见招拆招吧!

3.jenkins的Configure Global Security设置

大家都看见公司的jenkins主页右上角都有【登录】【注册】两个按钮,还有不同的账号都有不同的权限······,那么它们是在哪里设置的呢?没错啦,就是在Configure Global Security里设置的。

jenkins主页点击【系统设置】-->点击【Configure Global Security】,进入Configure Global Security设置页面

3.1-首先,你看到的会是这样一个页面,东西很少并且还看不懂,一脸懵逼!

3.2-点击【启用安全】,神奇的一幕发生了,出现了很多配置,看不懂没关系,你只需要关注我标红的几个功能。

3.2.1-安全域中,只需要选中 Jenkins专有用户数据库,然后保存,jenkins主页右上角就会出现【登录】【注册】按钮,那么用户注册的信息都放在哪里了呢?

windows一般都在主目录/users目录下,linux系统默认在root/.jenkins/users目录下

3.2.2-LDAP,另一种管理用户的策略,但是我没玩过

3.3-授权策略(一共有5中授权策略,挨个看下吧)

3.3.1-任何用户可以做任何事(没有任何限制),很简单,字面意思,就是通过url链接进入到jenkins主页的用户可以做任何事(在jenkins上)

3.3.2-登录用户可以做任何事,和3.3.1的唯一区别就是需要登录

3.3.3-安全矩阵(这个矩阵太长,就截了一部分,凑合着看),有人应该发现问题了(我放的是项目矩阵授权策略的截图),其实安全矩阵和项目矩阵授权策略唯一的区别就是项目矩阵授权策略支持在Job中再次授权而已,别的就没了,所以放这张截图没毛病!(输入用户账号,点击【添加】即可在用户组中看到该用户,然后哦就可以给他授权啦!)

3.3.3.1- 有个很大的问题需要说下,就是在授权的时候很容易会出现这个问题(看截图),莫慌,我来告诉大家怎么解决

方法一、直接恢复默认设置(请在看过方法二后再决定是否使用方法一)

进入jenkins主目录,找到config.xml文件,删除掉<useSecurity>(是否使用用户权限)和<authorizationStrategy>(用户权限是怎么进行划分的)这两个节点中的内容,然后重启jenkins(tomcat也要重启),再次进入Configure Global Security,你就会看见如3.1所示的页面

方法二、配置管理员权限

同样要修改config.xml文件,只需要在<authorizationStrategy>这个节点中添加以下的内容即可(把hemingqiang换成你的账号),然后重启jenkins即可(Tomcat也要重启)

再次进入Configure Global Security,你就会看见如3.3.3所示的页面,你的账号已经成为管理员了。

<permission>hudson.model.Hudson.Administer:hemingqiang</permission>

<permission>hudson.model.Hudson.ConfigureUpdateCenter:hemingqiang</permission>

<permission>hudson.model.Hudson.Read:hemingqiang</permission>

<permission>hudson.model.Hudson.RunScripts:hemingqiang</permission>

<permission>hudson.model.Hudson.UploadPlugins:hemingqiang</permission>

3.3.4-授权矩阵后有两个小按钮,点击【1】,会有一个有趣的现象,已勾选的权限会被全部取消,而未被勾选的权限会被全部选中;至于2号,点击了就会直接删除掉那个用户

好了权限这边也就介绍到这了。

4.插件管理( 持续集成一个android项目,至少得安装两个最基础的插件git  plugin(拉取代码)、gradle plugin(打包))

jenkins主页点击【系统管理】-->点击【管理插件】–>进入插件管理界面

进入眼中的是4个选项(可更新、可选插件、已安装、高级),【可更新】中放的就是可以升级的插件,但是升级得谨慎,要考虑到jdk版本和其他插件版本的兼容;如果要下载插件就在【可选插件】中选择,【已安装】中放的就是已经下载好的插件了;考虑到网络的原因,有时候在线安装插件会失败,所以在【高级】中提供了一个上传功能(前提是已下载好插件)

5.Job 配置

5.1-新建Job-jenkins主页左侧点击【新建】,进入一个简历Job页面(输入项目名称,为了规范好识别,最好和项目名相同,选择一种项目格式,我选的是“构建一个自由风格的软件项目”,之后就是点击ok了)。

5.2-点击【ok】,进入Job配置界面

5.2.1-首先你看见的第一排信息(General,源码管理,构建触发器,构建环境,构建,构建后操作),不管是什么项目配置, android也好,ios也罢,亦或者是RN,都离不开这几步,jenkins最核心的地方就是调用各种插件来完成这几个构建的步骤。

5.2.1.1-项目名称–>就是指Job的名称

5.2.1.2-描述–>描述就是对整个Job的介绍,最终描述的中文字会出现在Job主页的项目名称下面

5.2.1.3-启用项目安全,还记得 上面说的那个权限设置中的项目矩阵授权策略么。。。这个就是啦!!

5.2.1.4-GitHub project,Project url放的是github的地址,Display name写的是需要显示的名称(保存之后会在Job主页左侧列表的下面显示Git的图标,点击就可以之间跳转到你的git地址,不过下面写的Display name好像没什么用,不会显示出你写的name)

5.2.1.5-丢弃旧的构建,这个是构建历史的保存策略,看名字就能理解啦!

5.2.1.6-参数化构建,我想大家对图一应该都很熟悉吧,每次手动构建的时候都会见到这些。没错了,这些就是参数化构建!jenkins一共给我们提供这些参数(图二),像我们公司jenkins用的最多是参数就是choice(选择)和String Parameter(字符串)了,这些参数也可以直接在下面excute shell中调用。

5.2.1.9-Restrict where this project can be run,(Label Expression中写的是节点机器名)这个东西和分布式构建有关,而且我自己搭在本地的jenkins服务器又没有节点,所以感兴趣的小伙伴们自己去玩这个吧。

5.2.2-源码管理(代码是用什么管理的,我们就在源码管理中选什么,我用的是gitHub,但是我不准备选git,而是选Multiple SCMs,这个要下载Multiple SCMs plugin这个插件)

配置好Multiple SCMs是这样的,Repository URL中写的是git的地址(一种是http协议,另一种是ssl加密的git@······什么的)http协议只需要在Credentials中写上git仓库的用户名和密码即可(就可以拉代码了,ssl的那种我们以后再说);Branch Specifier(blank for 'any')中写的就是代码的分支了(分支名字)!

5.2.3-构建触发器

5.2.3.1-使用脚本构建,通俗易懂的话,但是我没试过(以后要试试)

5.2.3.2-Build after other projects are built,在上一个项目构建之后构建(没用过)

5.2.3.3-Build periodically, 周期性地定时构建,不考虑代码是否发生变更(日程表中一共需要5个参数,第一个是分钟,第二个小时,第三个是天,第四个是月,第五个是周)。我们公司没有配置这个,而而是配置了Pom SCM(定期检查代码库,发现有更新就构建,日程表的参数也是分钟、小时、天、月、周,比如我们公司配置的就是“* * * * * ”,它表示每分钟检查一次;“*/5 * * * * ”表示每5分钟检查一次;0 2 * * *表示每天2点进行构建······)

5.2.4-构建环境(没什么好讲的,解释下意思即可,不是很常用,所以没有深究!)

5.2.4.1-Delete workspace before build starts,在构建之前清理工作空间

5.2.4.2-Abort the build if it's stuck,如果构建卡顿,就终止它

5.2.4.3-Add timestamps to the Console Output,在控制台输出时增加个时间戳

5.2.4.4-Use secret text(s) or file(s),使用加密文本或文件

5.2.5-构建(这里就很重要了,构建有很多种方式,比如今天说的gradle构建,还有如公司的脚本构建(准确的说应该是脚本+gradle)······,个人觉得其实脚本构建更好,比较想怎么改就怎么改

5.2.5.1-Execute shell:这里写上想运行的shell命令即可。不过现在我们都有pipline脚本实现了

5.2.5.3-gradle构建,点击【增加构建步骤】–>点击【Invoke Gradle script】即可看见如图所示的gradle配置,我们主要关注两个地方,一个是Gradle Version,另一个是tasks。点击Gradle Version的下拉箭头,会出现你在系统设置中设置的本地gradle和default选项,至于tasks中写的就是gradle的打包命令了,clean assembleDebug打的就是debug包了,至于想打其他的包(参考gradle命令);这里还可以利用参数化构建将s{BUILD_TYPE}这个变量传过来,自由决定打什么包。

5.2.6-构建后操作

没啥好说的,最重要的就是保留apk

以上说的这些配置,尤其是是Job配置,显然都很繁琐。jenkins2.0后引入了pipeline,所有的流程控制都可以放在脚本里控制,所以也就没必要进行这些繁琐的配置了。
Jenkins就是一个任务的发起者和流程的控制者,本着这个,利用它可以实现很多工作的定时自动化执行,像构建、部署、发布、自动化测试的启动、已经静态代码检测等等。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值