Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台。
什么是持续集成
持续集成(Continuous integration),简称CI,是指开发阶段,对项目进行持续性自动化编译、测试,以达到控制代码质量的手段。持续集成是一种软件开发实践。
为什么要持续集成
- 易于定位错误。也就是当你的持续集成失败了,说明你新添加的代码或者修改的代码引起了错误
- 更加充分地测试系统中的各个单元
- 有助于项目的开发,数据的收集
- 便于开发流程的管理。要把一个开发的build(构建)提交给测试组做测试,测完满意了,再提交到发布组去发布
功能
- 一个自动化的周期性集成测试过程,从拉取代码、编译构建、运行测试、结果记录、测试统计等都是自动化完成的,无需人工干预,有利于减少重复过程以节省时间、费用和工作量。
- 他需要有代码托管工具的支持,比如SVN/GitHub/GitLab
- 监控软件开发流程,快速显示问题
部署Jenkins环境
一台主机:192.168.1.4(已安装Git)
准备Java环境
tar zxf jdk-8u201-linux-x64.tar.gz
mv jdk1.8.0_201/ /usr/local/java
rm -rf /usr/bin/java
vim /etc/profile
# 添加
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile
java -version
安装Jenkins
rpm -ivh jenkins-2.204.3-1.1.noarch.rpm
systemctl stop firewalld
systemctl start jenkins
web界面安装
访问http://192.168.1.4:8080
在Linux本地查看管理员密码
输入密码后,如果出现此界面
如果出现以下
解决方法如下:
第一步 打开插件管理的高级设置页面
http://192.168.1.4:8080/pluginManager/advanced
第二步 修改更新站点地址
将https改为http 如果不行 可以用清华的加速站点 如下
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
安装推荐插件
等待安装完成(很长很长时间)
安装加速神奇,Jenkins默认使用google来搜索插件的下载,而且插件也在国外网站,这里将updates目录中的default.json
内的url换为百度(搜索引擎)和清华(下载插件地址),前提必须出现过以上界面才会有updates目录
cd /var/lib/jenkins/updates/
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
然后重启服务,并重新访问Jenkins的web界面
systemctl restart jenkins
安装完成后,创建管理用户
用户密码更改
找到密码位置更改即可
配置全局工具
需要先安装maven
tar zxf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/maven
echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile
source /etc/profile
进入全局配置管理
配置环境中的maven,设置系统文件,将路径填写为安装maven后的配置文件路径
配置Java环境,路径同样是安装过Java的环境,版本为1.8
配置Git环境,路径写为Git命令所在路径,命令行执行which git
配置maven安装目录,如果本机没有也可以选择自动安装
保存
插件管理
web界面管理插件
可以进行对插件的升级、安装、卸载
安装GitLab插件
安装完成后重启Jenkins
安装完成后会退出web界面的登录,是因为重启了Jenkins
然后可以在已安装的界面中看到gitlab plugin
Jenkins官网下载插件
以下载maven integration
插件为例,在搜索栏搜索即可
查看插件的各个版本
选择需要的版本下载即可,以3.4为例,文件为hpi结尾的文件
然后在自己的Jenkins服务器web界面中上传该文件,等待重启即可
查看已安装插件
用户权限管理
以下是对普通用户的管理,并不是管理用户,所以先来创建两个普通用户
根据需求创建两个用户
以下是新创建的两个用户,后面的按钮齿轮用来更改密码,红色的代表可以删除用户
用户全局安全配置
安全矩阵:对用户的全局权限进行管理
项目矩阵:用户对项目的权限进行管理
在安全矩阵中添加创建的新用户
可以为用户usera添加响应权限,为全局可读,对凭据可创建/删除,对代理可创建/删除,对任务可构建/创建/读取
项目矩阵为userb添加权限
但是这两种授权策略有漏洞,如这两种权限策略的任务都是对所有项目或者任务的权限,不能针对某个项目进行特定的授权,
权限管理
基于角色的权限管理
需要安装角色插件
策略改为基于角色的策略
然后进行角色管理的界面
全局权限配置
管理角色
添加角色mupei并给予相应权限,保存,全局读取,任务构建、配置、读取权限
分配角色
添加用户并给予mupei角色的权限,添加的用户是已经创建过的
验证角色权限
新建任务
填写任务名以及风格
在任务中构建一个shell
根据以上创建任务的操作在创建两个任务,构建shell中的内容需要不一样以作区别,一共三个任务
切换usera验证权限,usera和userb是在前面已经创建过的用户了
全局读取权限,能看到这个界面就说明有读取权限
进入随便一个任务,都只有build 和configure权限,构建和配置
在切换userb,登录之后直接权限拒绝
任务权限配置
重新使用管理用户进入管理角色界面
任务配置中添加role名和pattern为任务的名字,test-.*代表test-A和test-B两个任务,并给予权限,任务的构建/配置/删除/读取/工作空间
进入分配角色界面
在任务角色中添加usera和userb,并给予test角色的权限
之前的全局权限,即使进入任务之后,也只有构建(buile)和配置(configure)权限,刚才授权的test角色,对于任务具有,构建(build)、删除(delete)、工作空间(workspace)、配置(configure),如果用户没有全局的read权限,任务角色的设置将会失败
usera:全局:读取、构建、配置
任务:构建、删除、工作空间、配置
userb:全局:无
任务:构建、删除、工作空间、配置
验证
切换usera查看任务权限,如果没有配置没有问题,权限还是之前的权限的话,多等一会在刷新即可
test-A任务
test-B任务
hello-world任务,依旧还是保持了global的权限配置
切换userb查看权限
节点权限配置(集群结构)
对整体项目的操作
创建GitHub项目
使用GitHub账号登录,创建一个新的项目
新项目名为test,并且为私有库
准备上传项目
打开之前的kgcweb.tar.gz包将src目录和pom.xml文件拖入即可,必须解压后在拖入
上传成功
在Jenkins的web页面中创建一个新的任务,任务名最好是与GitHub中的项目名一样
配置源码管理
源码管理规定这个任务从哪里拉取的代码,我们这里是使用Git来拉取GitHub的代码,需要输入git中项目的ssh路径或者https路径,这里使用ssh路径
可以看到输入代码仓库地址之后,报错连接不到服务器,需要主机密钥来进行连接,所以报错是正常的,要么是没有密钥,要么就是密钥是错的,这里是因为没有密钥,所以将主机的密钥添加到GitHub中
添加一个新的ssh公钥
然后需要在Jenkins本机生成一个密钥对,将公钥复制到GitHub中
完成之后进入Jenkins的源码管理中,添加凭证
选择凭证类型为SSH 用户名加密钥的形式,username可以随便写,不需要Jenkins主机中存在,然后将Jenkins主机中生成的私钥复制到这个位置即可
然后选择自己创建的凭证,稍等几秒,红色字体报错信息消失了
设置构建触发器
常用:1、有代码仓库触发Jenkins构建任务
2、poll scm:日程表 crontab
今天使用日程表SCM来构建,为了能够确保任务能够执行成功,Jenkins采用了分散负载,为了防止同一时间的任务比较多而失败,这里将0改为H,表示在23时以后的一个小时之内将任务执行成功即可,不要过多的纠结具体的执行时间
设置构建环境
构建环境可写可不写,这里选择一个时间戳的环境,在每一条终端输出前加上时间戳
完整构建项目代码
这三个是完整构建的步骤
对项目的代码进行完整的一次构建,Pre Steps是Build之前的操作,Build只代表mvn的操作,Post Steps是Build成功之后的操作,Pre Steps一般是不怎么设置的
Build
mvn clean package
= clean package
Post Steps
- Run only if build succeeds:当Build成功执行后在执行
- Run only if build succeeds or is unstable:成功或者不稳定
- Run regardless of build result:无论结果如何
一般选择第一种,以下表示,当mvn clean package
执行成功后执行shell命令
echo "build success $(date +%H:%M:%S)" >> /tmp/test.txt
保存任务
构建任务
查看终端输出结果
输出的结果就是构建在执行的过程,也是mvn执行的mvn clean package
,配置maven的阿里云镜像也是在这里进行使用的
整个输出结果的开头,表示进行构建的用户
构建完成后在输出的结果中可以看到熟悉的画面,mvn执行成功的画面
然后可以去查看构建成功后执行的shell是否成功
cat /tmp/test.txt
build success 10:18:11
构建后操作(推荐使用163邮箱)
也就是构建成功之后发送邮箱通知你
首先来设置关于Jenkins邮箱的操作
在最下方找到Jenkins URL的地方,填写自己的邮箱
找到扩展邮箱,smtp为qq的服务器,如果是163则将qq改为163,高级中的密码是邮箱的授权码
邮件通知中的设置和扩展邮箱类似,然后保存
再次进入系统设置中,在最下方找到测试邮件,填写一个邮箱,点击“test configuratioin”即可测试,如果报错,检查以上设置,有可能会因为保存不成功
重新打开test任务的配置,直接来设置配置后操作
设置成功或者失败来发送邮件
Project Recipient List:收件人(建议使用163邮箱)
Attach Build Log:是否将日志作为附件发送
然后进入高级设置,设置触发器,将的发送人删除,添加Recipient List
(刚才定义的收件人列表)和Requestor
(触发本次操作的用户),在添加两个触发器Success和Unstable,然后保存
重新构建任务,成功后查看自己邮箱中是否有邮件产生,如果没有发送邮件,检查系统配置中关于邮箱的配置,有的配置可能会掉,重新保存即可
项目构建完成后的状态
部署Jenkins集群
应用场景:公司只有一台服务器而项目过多,性能不足。多个作业同时构建时候构建速度慢。项目构建资源分配上不合,需要多个节点分配进行构建作业。
主从只是为了帮助从分担硬件资源的压力,最后验证能够看到构建成功的war包是在从服务器的Jenkins目录下的
为了达到项目的运行速度,建议将两台主机的maven都做阿里云镜像
192.168.1.4(Jenkins主,已安装)
192.168.1.6(Jenkins从)
根据上面的安装步骤安装好第二台Jenkins,并且根据以上步骤需要做到配置全局工具之后才可以进行之后的操作,否则会在构建时报错
192.168.1.6做对1.4的免密登录
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Zww0wyWKcruXNTuid4YPdDSBhJ0dsIQJfGIh8KbnpgQ root@192.168.1.6
The key's randomart image is:
+---[RSA 2048]----+
|+.oo *+*Bo. |
| o+ =o++o= |
| .+oo o + |
| o o . . + |
|E . . . S + |
|.o o + = |
| .o . =.o |
|.o oooo. |
|. .. +. |
+----[SHA256]-----+
ssh-copy-id -i root@192.168.1.4
192.168.1.4登录Jenkins管理界面
进入管理节点界面
添加1.6节点
填写作为jenkins从的信息,远程工作目录为1.6Jenkins的安装目录
点击上图中“添加”,添加凭据,用户名密码为1.6的主机用户和密码
选择凭证,密码验证策略为手动可信任密钥验证策略
完成之后可看到主从状态
指定从节点来管理test任务,随便进入一个任务进行配置
限制某个项目在从节点运行,webitem是从节点的标签,表示这个项目将会在webitem代表的1.6主机上运行,保存即可,因为test任务是刚验证的,所以直接在test任务直接添加这一个就行
重新构建test任务
直到构建成功,会给你设置好的邮箱发successful邮件
也可以在作为Jenkins-slave的主机上查看构建的项目和成功后的Post Steps的文件/tmp/test.txt
192.168.1.6
查看构建后的项目
ll /var/lib/jenkins/workspace/test/target/
总用量 4
drwxr-xr-x. 4 root root 54 3月 10 18:38 kgcweb
-rw-r--r--. 1 root root 2104 3月 10 18:38 kgcweb.war
drwxr-xr-x. 2 root root 28 3月 10 18:38 maven-archiver
查看项目成功后执行的shell
cat /tmp/test.txt
build success 18:38:50