Jenkins 使用

 

一、简介

1. Make工具

这个工具是最最原始的工具了,在linux下编过程序,看过比较大的c/c++代码的人应该都听说过这个工具(Windows下对应的工具为nmake)。它负责组织构建的过程,也就是负责指挥编译器如何编译,连接器如何连接,最后生成一个可用的文件。

2. Ant工具

但是有人觉得make工具的很难使用,他的语法很难理解,就发明了ant

3. Maven工具

Maven像make一样是个构建(build)工具,Maven工具是对ant工具的进一步改进(这么说不太准确,但是可以这么理解)。在make工具中,如果我们要编译某些源文件,我们肯定首先要安装编译器等工具,但是有时候需要不同版本的编译器,如果把每个包都下载下来,在makefile中进行配置制定,需要的包非常多,很难管理,于是人们发明了Maven工具。Maven使用配置文件pom.xml对环境进行配置,例如设定编译器的版本,设定所需支持包的URL,这样maven就可以自动去下载所需的包。这样如果需要对构建环境进行改变时,直接改变pom文件就可以了,maven会自动网络上下载配置的包。Maven可以利用一些别的工具,实现对编译结果的统计,对源代码的检查,对于代码的测试等。

4. Jenkins工具

其实Maven还是不够强大。Maven可以控制编译,控制连接,可以生成各种报告,可以进行代码测试。可是如何控制这个流程呢?先编译还是先连接?先进行代码测试,还是先生成报告?这个工具就是Jenkins。Jenkins能够对流程进行控制,对能够对各个阶段生成的各种结果进行综合,以图表的形式呈现出来。但是不同的工具生成不同格式的结果,Jenkins如何让这些结果呈现出来?这就是jenkins插件,Jenkins插件使maven中用到的各种工具生成的结果能够在Jenkins中呈现出来。

二、Jenkins

jenkins是一个广泛用于各种项目的"自动化"编译、打包、分发部署。jenkins本身是用java语言开发的,所以安装jenkins的机器至少要有jdk。jenkins可以很好的支持各种语言(java, c#, php等)的项目构建,也完全兼容ant、maven、gradle等多种第三方构建工具,同时跟svn、git能无缝集成,也支持直接与知名源代码托管网站github、bitbucket直接集成。Jenkins默认情况下可以实现项目更新(通过SVN)和项目发布(通过MAVEN)

1、Jenkins 安装(windows)

1)windows安装包

1.以管理员身份运行cmd.exe,进入到jenkins安装目录

2.停止服务:jenkins.exe stop
2019-05-05 22:31:21,203 INFO - Stopping the service with id ‘Jenkins’

3.启动服务:jenkins.exe start
2019-05-05 22:32:09,753 INFO - Starting the service with id ‘Jenkins’

2)war安装包

下载jenkins.war, 下载成功后,将war包文件放入对应的目录(如C:\Users\Jenkins\),在命令行切换目录到Jenkins,然后执行java -jar jenkins.war
访问http://localhost:8080 。

Jenkins集群配置
集群配置也十分简单,就是添加slave节点的过程。点击系统管理->管理节点->新建节点,各个配置后面都有详细的帮助说明的。
在启动方法这里推荐使用 Launch slave agents>构建Job
其实到这一步,就是jenkins的常规流程了,你可以参照创建Job选项的界面的各个配置,制定你构建计划,或者我们直接使用脚本来完成我们的构建操作(建议)选择构建Execute shell,文章末尾会附上一个完整项目的shell构建流程。


Pipeline
Pipeline字面意思就是流水线,很好用的Jenkins的一个插件,将很多步骤按顺序排列好,做完一个执行下一个。真实的工作环境有很多job,比如先编译,然后执行静态代码检查、单元测试、然后部署服务器、服务器重启、进行ui测试等。我们需要对这些job进行一些设置将它们的上下游关系配置好。
这时候Pipeline就派上用场了。在Jenkins主页点击新建视图,然后选择Build Pipeline View,然后填写Select Initial Job,构建后的操作可以选择其他的Job,以此类推,这样一个流水线就完成了。Pipeline提供视图界面,你可以在视图上形象地看到整个构建计划的执行流程和完成度。

 

 

2、Jenkins常用命令

(1)关闭Jenkins
http://localhost:8080/exit

(2)重启Jenkies
http://localhost:8080/restart

(3)重新加载配置信息
http://localhost:8080/reload

(4)Jenkins时区设置为北京时间
打开 【系统管理】->【脚本命令行】运行下面的命令
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

3、插件安装

(1)如果在安装jenkins的时候没有安装相关插件,可以按照如下方式安装(已经安装,则不需要)

 (2)选择可选插件菜单,搜索自己想要的插件,然后安装,如果有插件一直安装失败的情况,可以从jenkins官网下载插件,然后导入到jenkins。在jenkins插件管理->高级,选择上传插件进行安装。

4、定时构建语法

* * * * * (五颗星,中间用空格隔开)
第一颗*表示分钟,取值0~59
第二颗*表示小时,取值0~23
第三颗*表示天,取值1~31
第四颗*表示第几月,取值1~12
第五颗*表示星期,取值0~7,其中0和7代表的都是周日
H表示随机,没有用到 H 随机的话,不要加括号

1.
H/30 * * * * 每30分钟构建一次:

2.
H H/2 * * * 每隔2个小时构建一次
H 4-19/3 * * * 凌晨点到下午7点,每隔3个小时构建一次
0 8 * * * 每天早上8点构建一次
H 8-18/3 * * * 每天早上8点到晚上6点每三小时检查一次

3.
* * 3-5 * * 每个月的3号,4号,5号 都会被构建,具体时间未知
20 16 15 * * 每个月的15号下午16点20分构建一次

4.
0 8,12,22 * * * 每天的8点,12点,22点,一天构建3次(多个时间点,中间用逗号隔开)

5.
每个月的1-7号一天构建一次
H/30 8-19/3 1-28 1-11 1-5 在1-11月中的1号-28号,每个工作日,早晨的8点到下午7点每隔3.5个小时会触发构建

 

5、用户和权限

jenkins 配置用户角色权限需要安装插件 Role Strategy Plugin

1.安装 Role Strategy Plugin 插件,下载地址:https://updates.jenkins-ci.org/download/plugins/role-strategy/

 打开jenkins 系统管理-->管理插件-->高级,点击上传,选择下载的插件安装

2、安装完后,重启jenkins,进入系统设管理-->Configure Global Security ,配置如下,保存

 

 

 

3.配置User/Group权限

打开 系统管理-->Manage and Assign Roles

 

3-1. 管理角色(Manage Roles)

    选择该项可以创建全局角色、项目角色,并可以为角色分配权限

    

    添加test组,并给Over all 的Read 权限、Job Build 权限、View的Read权限。

     Project roles 配置Pattern,例如匹配以 auto开头的,需要写成 auto.*切记!配置完后保存

 

3-2.添加用户权限(Assign Role)

    系统需要有用户(若没有可添加:系统管理 --> 用户管理  -->添加用户),然后:

    

4,创建 autotest 任务, 用户test(只有构建权限)用户登录进去,发现只能看到autotest任务,实现不同用户不同视图及不同权限

   

 

 

四、ssh密钥

1、检查是否已存在SSH密钥对

服务器可以通过ssh来通信和连接,linux一般默认已安装了ssh服务,windows一般未安装,建议安装OpenSSH

1)、在Windows, Linux, macOS系统下,进入用户home目录(windows为C:\Users\当前用户名)
2)、进入.ssh/子目录(windows为C:\Users\当前用户名\.ssh),
3)、若不存在则需按照下文步骤生成SSH密钥对,
若存在以下文件,则表明已经生成过:

AlgorithmPublic keyPrivate key
ED25519 (preferred) id_ed25519.pub id_ed25519
RSA (at least 2048-bit key size) id_rsa.pub id_rsa
DSA (deprecated) id_dsa.pub id_dsa
ECDSA id_ecdsa.pub id_ecdsa

2、生成SSH密钥对

1)、打开windows CMD
2)、执行ssh-keygen命令,comment可以是邮箱账号会出现在.pub文件中
ssh-keygen -t rsa -b 2048 -C "<comment>"

可按提示输入密码(亦可直接回车跳过)生成完成后,既可在如下图提示的目录下查看到密钥对文件

在这里插入图片描述

3、通过SSH密钥对实现免密登录Linux服务器

将公钥拷贝到目标主机的用户home/.ssh目录下的authorized_keys文件中。又或者通过如下命令进行公钥拷贝:

# 其中可通过-p指定ssh端口(默认22)
ssh-copy-id 用户名@目标主机IP -p 22

拷贝完成后即可在私钥所在的机器上直接免密登录绑定公钥的机器

ssh 用户名@目标主机IP 

 

五、Jenkins部署项目

当我们每次把代码提交到仓库的时候,都希望Jenkins会自动部署运行,我们应该给它一个凭证以便访问文件,即免密访问,如果想要访问对方主机,需要把本机机的公钥交给它即可。

在jenkins所在主机生成ssh密钥,我们把公钥给仓库平台gitlab、把私钥给Jenkins。

1、添加公钥到gitlab用户,用来clone代码

我们在Jenkins所在的主机生成秘钥,然后查看id_rsa.pub ,把公钥复制到仓库就行

1)、登录gitlab,点击右上角头像 -> 下拉菜单Settings -> 左侧菜单SSH Keys

在这里插入图片描述
2)、将之前生成的公钥id_rsa.pub内容粘贴到Key文本框,同时自定义title。添加完成后,即可在私钥所在的机器上拥有该ssh公钥绑定账户的操作权限(注意对应ssh gitlab库链接)
在这里插入图片描述

2、接下来我们要把私钥交给Jenkins。依次点击 凭据–系统–全局凭据–添加凭据

我们先修改类型为SSH Username with private key,然后点击下面的 Enter directly,把Jenkins所在主机的私钥复制粘贴到此即可

点击ok之后返回查看是否添加成功

 

 

六、jenkins操作

1、jenkins普通任务

1 )新建任务
我们点击 New Item创建一个新任务,输入任务名。类型选择Freestyle project,然后点击OK

 

我们直接选择Source Code Management,选择git,填写仓库的SSH链接和选择凭证用户,最后点save即可

 

 

 

 2)构建任务

 

新建任务之后,点击左边的Build Now即可开始执行任务。我们可以在左下角看到构建历史,还可以点击倒三角形选择Console Output看到具体的构建步骤

 

 

 

 

 

 

2、jenkins触发式任务

1)准备一个测试脚本,开发如果提交了代码就执行这个测试脚本。

2)我们点击New Item创建一个新任务,输入任务名。类型选择Freestyle project,然后点击OK

3)源码管理选择git,然后只需要在repository url中输入git仓库地址即可。

4)构建触发器:即gitlab有提交操作则自动部署,这里只需设置一个认证的token即可,

gitlab调用触发器,使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可

在系统管理–>用户管理–>查看用户id和token,需要把用户id和API Token加入触发器中,做用户验证

根据触发器验证令牌和用户id+token会生成一个下面的url,只需要访问这个URL地址jenkins就会自动部署对应项目的代码。

http://admin:984c9edf027e750f0587808fab0c3f9b@192.168.100.10:8080/job/jenkins_trigger/build?token=hehe

在jenkins全局安全设置中取消勾选“防止跨站点请求伪造,不然jenkins会认为gitlab的请求不合法。

(5)普通构建,选择execute shell,执行部署脚本即可

 

 

(6)jenkins定时构建,定时构建一般用在安卓,ios打包,每天凌晨会拉取安卓,ios进行编译打包,并自动推送到共享。本示例演示定时执行一个命令

 选择Execute Windows batch command

(6)在gitlab中配置webhooks,配置URL,每次提交代码就访问这个url,执行构建

URL这里输入上面上面用户ID+API token+job token生成的URL地址即可。触发工作选择,push event,merge request event即可。

 

 

(7)添加完成测试:点击test模拟提交操作,看看是否会执行自动构建

Jenkins查看,可以看到构建也是成功的。

 

 

七、高级改造

1) 改造二:加入直接查看报告的能力

在本地执行时,我们是 allure 可执行文件来生成报告,那集成到 Jenkins,我们需要先安装 allure 的插件

在插件管理中搜索 alluer 插件进行安装

image.png

 

在全局工具中配置 allure 相关

image.png

 

然后继续改造 Job,在构建后的操作中添加 allure 报告的信息。

image.png

 

这样之后,我们就可以在构建后,在 Jenkins 上直接查看执行后的报告了。

这样使用之后,感觉还是差点东西,差什么呢,因为用例很多,每次构建的时间都很长,这就导致我无法知道什么时候结束,来第一时间查看结果并反馈执行情况。所以我们还需要继续改造,加入通知的能力。

 

2)改造三:增加通知的能力

在和项目组沟通后,确定了两种方式的通知,企业微信通知邮件通知。 研究一番之后,发现,Jenkins 使用插件来实现企业微信通知,只能显示少量的信息(如:开始时间),并不能达到我们想的显示大致的执行结果的能力,所以这部分,我就直接使用 Python 脚本来实现了,不使用 Jenkins。 这里就不做详细说明了,大致的思路是:解析执行生成的 xml 文件来获取执行结果信息,然后按照企业微信机器人的方式来通知。附上一张我调试的效果图:

image.png

虽然企业微信通知没有使用 Jenkins,但是邮件的通知,Jenkins 还是很好用的,我们用 Jenkins 来进行邮件的通知发送,接着改造 job。

在构建后的操作中添加 Editable Email Notfication,填写发送邮件的信息。

image.png

这样改造之后,我们也拥有了通知的能力。

这时候领导又提要求了,现在想晚上使用脚本来巡检,早上查看结果。这样不可能每天晚上登录 Jenkins 来构建,所以我们需要继续改造,加入定时构建的能力。

 

3) 改造四:增加定时构建

在 job 的构建触发器中选择 Build periodically H 2 1,2,3,4,5 表示周一到周五每天凌晨 2 点左右开始构建,填写后,可以查看到下面显示的下次构建的时间 这样改造之后,每天晚上就自动构建了。

image.png

到这里我们就拥有了 Git,查看报告,邮件通知,定时构建的能力。

这个时候运维的小伙伴又提要求了,给我们自动化测试分配了一台服务器,让我们在那台设备上测试,不想和开发发布的混在一起。

 

4)改造五:指定节点运行

我们需要在指定节点构建,通过 Jenkins 来调度。这样我还需要接着改造了。

1. 添加节点

进入系统管理(configuer system)》管理节点(manage nodes and clouds),点击新增节点。

image.png

 

注意:节点的标签不要用中文 再配置节点属性和工具

image.png

 

如果启动方式没有上方选择的选项,需要到全局安全配置中勾选如图的地方:

image.png

 

2. 连接节点

新增的节点是没有连接 Jenkins 服务的,需要启动一个 agent 来主动连接到服务。

image.png

按照如下步骤来操作: 到从节点(执行机)上登录 Jenkins,点击刚刚添加的节点中,会如下图显示

image.png

点击红框标记的图标,会下载下来一个文件

image.png

 

双击打开下载的文件,会显示一个小窗口,自动连接(需要 jdk 环境)

image.png

 

连接后会添加到执行机的服务中运行,之后不用再操作。

注意:如果连接提示失败,可能是端口没有开放,配置时选择的随机生成端口,如果连接提示端口没有打开,将 Jenkins 所在的服务器上刚使用的端口打开即可。

image.png

改造 Job,配置使用执行的节点

在一般信息中勾选限制项目的运行节点,填写我们添加的节点的标签。

image.png



posted @ 2016-11-01 03:14  liangww  阅读(5529)  评论(0)    收藏  举报