Jenkins
特性
- 开源java语言开发持续集成,持续部署工具
- 易于安装:yum/docker/war
- 消息通知及测试报告:集成RSS/e-mail,通过rss发布构建结果或当构建完成时候通过email通知,生成junit测试报告
- 分布式构建:支持jenkins能够让多台计算机一起构建/测试
- 丰富插件支持:git,maven,docker
持续集成流程
(1)提交代码到git仓库(gitlab)
(2)使用git工具到git仓库拉取代码到安装jenkins的集成服务器,再配合jdk,maven等软件完成代码编译,代码测试与审查,打包工作
(3)jenkins将编译生成的jar/war分发到测试服务器/生产服务器,完成发布,即可访问
持续集成服务器安装:jenkins,jdk,maven,git
安装
(1)先安装jdk,然后获取jenkins安装包
https://jenkins.io/zh/download/
如果centos地址:
https://pkg.jenkins.io/redhat-stable/
国内镜像位置:wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.235.2-1.1.noarch.rpm
(2)安装文件
rpm -ivh jenkins-2.235.2-1.1.noarch.rpm
(3)修改jenkins配置
vim /etc/sysconfig/jenkins
修改为:
JENKINS_USER="root"
JENKINS_PORT="8888"
(4)启动jenkins
systemctl start jenkins
启动jenkins报错: Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
按提示输入:systemctl status jenkins.service检查原因
解决方法:
- 查看当前Java的环境变量 echo $JAVA_HOME
-
复制Java的环境变量地址, 编辑/etc/init.d/jenkins文件, 指定位置添加该地址, 后缀附上/bin/java vim /etc/init.d/jenkins
修改完重启jenkins
systemctl start jenkins
可以看到启动成功
(5)访问服务器地址/8888端口
(6)获取并输入admin账户密码
cat /var/lib/jenkins/secrets/initialAdminPassword
(7)跳过插件安装
jenkins插件默认连接官网下载,速度很慢,暂时跳过
选择自己选择插件安装,无需推荐安装,然后选择无
插件安装
jenkins自身不提供一些功能,我们利用插件实现从gitlab拉取代码,使用maven构建项目
(1)修改jenkins插件下载地址
将默认官网插件下载地址更改为国内插件地址
jenkins->manage jenkins->manage plugins->available
查出我们可以用的官方插件,这一个tab页面加载速度慢,因为查询是走的官网
通过这一步骤我们就将jenkins官方的插件列表下载到了本地,然后修改地址文件,替换为国内插件地址
cd /var/lib/jenkins/updates
## 替换命令 将jenkins官方地址更改为国内镜像地址,将里面的google地址更改为百度
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
通过上面的操作,我们以后下载插件的速度将会很快
(2)jenkins操作界面manager plugins点击advanced,将update site地址更改为国内插件地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
(3)更改完配置,重启jenkins,不需要去服务器重启,只需要在jenkins网页访问端口如8888后加上/restart命令,然后选择yes进行重启
(4)在上一步重启完成之后,页面重新登录,我们准备下载安装jenkins中文汉化插件(部分汉化)
manage jenkins->manage plugins->available
等页面加载完毕,然后在查找框中输入chinese
找到以后,勾选第二项,下载完后直接重启,该插件需要重启生效
选择restart选项以后如果页面没重启刷新页面即可重启,再一次进入可以看到中文界面
jenkins用户权限管理
不同的用户登录jenkins应该有不同的权限,我们使用role-based authorization strategy
插件来管理jenkins用户权限
(1)安装该插件
这次我们选择直接安装,因为该插件不需要重启生效
(2)安装完成后,选择主菜单->系统管理-> 全局安全配置
进来以后可以发现授权策略,默认为登录用户具有一切权限,很明显是不合理的,我们需要不同的人员拥有不同的角色,进而有不同的权限,因此我们修改为role based strategy(安装了插件才会显示该选项),然后保存
(3)创建角色,主菜单-> manage jenkins选择下面的manage and assign roles
manage roles角色主要有3种,
第一种 global roles:用于管理jenkins,比如admin
我们在这里面增加baseRole全局基础角色,用于给project roles下面的角色增加访问jenkins的权限,给baseRole的权限有overall中的read,有了这个就这个角色有了基本的登录权限
第二种 project roles:根据项目来分配的角色,不同的项目被不同的人访问
这里填入角色名称和角色能访问项目的正则表达式(pattern)
比如role1 pattern=radientApi.*,即能访问radientApi开头的项目,同时勾选job下面的所有权限
第三种 slave roles:节点角色,场景:jenkins主从下的角色,暂时用不到
最后保存
(4)创建用户:再次选择manage jenkins-> manage users-> 新增用户
然后我们如果不分配角色给用户,我们直接用该用户账户进行登录的话,结果如下
因此我们重新用管理员账户登录,选择主菜单 manage jenkins-> manage and assign roles-> 分配角色
其中又分为global roles,item roles,node roles
我们在global roles中为我们的创建的radientApiTestUser用户分配baseRole角色,让他具有登录权限
此时如果重新登录radientApiTestUser用户,是可以看到基本的列表的,但是无法看到项目
然后在item roles为其添加role1角色
(5)建立项目测试
任务名称输入radientApi,然后暂时选择自有风格项目选项,然后确定,我们radientApiTest测试用户就可以在项目列表看到这个项目了,因为他的角色对于项目pattern radientApi.* 具有查看权限
jenkins凭证管理
凭证可以用来存储需要密文保护的DB密码,gitlab密码信息,docker仓库密码等,以便jenkins和这些第三方应用交互
(1)安装credentials binding插件
manage jenkins->manage plugins ->可选插件->等加载完毕再去搜索
点击直接安装,然后回到主界面
(2)安装完后,在系统配置中可以看到凭据菜单
点击右侧的提供者-> 全局
然后点击左侧,新建凭证
可选的凭证类型有5种,前两种常见:
- username with password:(常见)
存储一些用户名和密码来登录的凭证,比如我们使用gitlab去拉取代码,需要用到gitlab账户信息,那我们就可以使用这个凭证 - ssh username with private key:(常见)
应用在ssh的免密登录的情况下,gitlab和github均支持这种登录方式 - secret file
密码文件,即支持密钥文件的方式存储 - secret text
密钥文本 -
certificate
证书类型
(3)测试前两种凭证
在github,gitlab上拉取代码有两种方式,http方式用的是普通的用户名密码方式,ssh方式即可以免去密码的方式拉取代码
(3.1)安装git插件和git工具
为了让jenkins支持从gitlab上拉取代码,需要jenkins网页端安装git插件以及在安装有jenkins的centos服务器上安装git
直接安装完毕后,我们在主控制台,选择new item来随便创建一个项目
点击确定以后
可以在git选项的repositories填写需要拉取代码的git仓库的信息
然后我们下一步在安装有jenkins的服务器上装上git(不装的话,jenkins是无法到git上拉取代码)
yum install git -y 安装
git --version 安装后查看版本
(3.2)上一步将git装好以后,我们就可以在利用jenkins去gitlab上拉取代码,我们首先创建一个username with password的凭证
用户名,密码就是登陆gitlab的用户名和密码,点击确定,这样就可以看到我们创建的这个凭证
(3.3)使用上面创建的凭证
点击自己的某个项目进入项目管理页面,点击项目管理页面左侧的配置,进入项目配置页面
源码管理用于在git拉取代码,仓库地址根据登录类型(username password,ssh)的不同,地址不一样,我们在gitlab上复制http形式的仓库url填入下面第一个选项,然后在没有选择第二项的时候,将会报错,因为没有权限去这个地址拉取代码,因此我们在下面的credentials中选择我们刚刚创建好的凭证
最后点击应用,保存
然后我们点击立即构建来构建这个项目(这里的构建其实就是将gitlab上的代码拉到jenkins服务器磁盘上指定目录)
然后可以点击构建历史中的记录来进入构建详情,选择控制台输出查看项目构建情况,最后jenkins会将项目的代码拉取到jenkins服务器的/var/lib/jenkins/workspace这个目录下面,我们可以在安装jenkins的对应服务器目录进行查看
可以看到磁盘上已经将gitlab上的项目的源代码下载到了磁盘本地
(3.4)ssh免登陆凭证
需要在jenkins服务器防止我们的私钥,将我们的公钥上传到gitlab服务器
(3.4.1)使用root用户生成公钥和私钥
ssh-keygen -t rsa
在/root/.ssh/目录保存了公钥和私钥
(3.4.2)将上一步生成的公钥 id_rsa.pub的内容复制到gitlab上,我们首先用管理员的账户登录gitlab,然后选择用户设置,将公钥内容填入
至于私钥,我们可以用到jenkins的凭证管理来管理私钥,来到jenkins的凭证管理,添加一个ssh凭证
保存,然后跟上面一样,在项目的配置界面的源码管理中,仓库地址改成gitlab的ssh地址不再用http,然后凭证选择ssh方式,继续点击构建(目前的构建仅仅是拉取代码到jenkins服务器磁盘)就可以
maven安装配置
在jenkins继承服务器上,我们需要安装maven来编译和打包项目
(1)安装maven
https://maven.apache.org/download.cgi
下载maven包,上传到jenkins服务器
tar -xzvf apache-maven-3.6.3-bin.tar.gz
mkdir -p /home/develop/maven_3.6.3
mv apache-maven-3.6.3/* /home/develop/maven_3.6.3 移动文件
(2)配置环境变量
vim /etc/profile
export JAVA_HOME=/home/develop/jdk1.8.0_161
export MAVEN_HOME=/home/develop/maven_3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
使配置生效
source /etc/profile
查看maven版本
mvn -v
(3)jenkins的后台系统管理-> 全局工具配置
在这里我们需要配置jdk和maven,配置jdk的时候,点击新增jdk,然后取消勾选自动安装,因为我们已经在jenkins服务器上自己安装了jdk了,然后界面会更换到下一个界面
下一步配置maven,同样,我们点击新增maven并取消勾选自动安装install automatically
最后,我们点击应用,再点击保存,即可保存输入
(4)manage jenkins->configure system(系统配置)
我们需要在系统配置中加入一些全局的变量,让jenkins知道maven的一些命令
第三个属性的key是固定的,即往linux的path追加了maven的命令
最后点击应用,保存
(5)为了提高下载速度,修改maven的镜像为国内镜像
// 创建本地仓库目录
mkdir -p /home/maven_repo
// 修改maven的settings.xml
vim /home/develop/maven_3.6.3/conf/settings.xml
本地仓库改为:
添加阿里云私服地址
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
(6)上一步我们将代码拉取下来,这一步我们完成代码的编译和打包
我们点击增加构建步骤,选择执行shell脚本,然后在命令中输入测试命令
点击应用保存,然后回到项目配置界面,左侧选择build now,然后jenkins界面看控制台输出,可以看到首次构建会拉取依赖到装有jenkins服务器上的maven仓库中,最后完成编译和打包,成功即证明我们之前的maven配置是有效的
我们然后到jenkins拉取在jenkins所在服务器的磁盘上的项目的target目录中已经有了编辑构建的war/jar包
tomcat安装配置
(1)在所有的项目要部署的负载节点安装jdk和tomcat
(2)登录tomcat页面,因为jenkins是需要tomcat的账户才能将构建好的项目的war包远程传输到装tomcat的负载节点,因此需要为tomcat服务器开启账户权限(默认情况是没有开启的),验证方式:点击manager webapp
我们将会看到403的无权限界面,即目前是没有配置账户的,配置完以后,该界面是允许我们去管理我们的项目的
(3)我们去两个负载节点的tomcat的文件夹里面conf目录,然后
vim tomcat-users.xml
默认没有配置,我们按照这个示范进行配置
我们直接将所有的role标签和
(4)修改/webapps/manager/META-INF/context.xml ,注释掉下面的代码,因为默认是不允许我们远程访问tomcat的,注释了就允许远程访问了
这时候我们就完成了tomcat用户和角色的配置,接着进行重启tomcat操作
然后重新在tomcat界面,选择manager tomcat,输入tomcat用户账户名和密码进入tomcat管理页面