Jenkins研究
1. 简介
Jenkins是一个开源软件项目。在企业的软件构建过程中,JAVA的应用工程稍显复杂,由于复杂构建、和代码上线、并且服务的重启。整个过程下来,消耗的时间较多,Jenkins却能很好的集成maven的编译方式,且利用自动化的插件、和自定义开发脚本的支持,所以目前广泛的应用于JAVA工程的持续集成平台。
Jenkins is an automation engine with an unparalleled plugin ecosystem to support all of your favorite tools in your delivery pipelines, whether your goal is continuous integration, automated testing, or continuous delivery.
l 什么是集成
指的是代码由编译、发布和测试、直到上线的一个过程
l 什么持续集成
高效的、持续性质的不断迭代代码的集成工作
l 如何高效准确的实现持续集成
必不可少的需要一套能自动化、并且可视化的平台来帮助我们。
那么总结来看,Jenkins就是一个可以帮助我们实现持续集成的平台。
Jenkins的缺点:
Jenkins是开发人员开发得,没有照顾到运维人员得感受。CMDB得对接是Jenkins得短板。
1.1. 名称解释
l 持续集成 (Continuous integration,简称CI)
l 持续交付(Continuous delivery)
l 持续部署(continuous deployment)
1.2. Jenkins目的
l 持续、自动地构建/测试软件项目。
l 监控软件开放流程,快速问题定位及处理,提示开放效率。
1.3. 持续集成组件
l 一个自动构建过程,包括自动编译、分发、部署和测试
l 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,例如:SVN、Git代码库
l 一个jenkins持续集成服务器就是一个配置简单和使用方便的持续集成服务
1.4. 持续集成的意义
l 持续集成中的任何一个环节都是自动化完成的,无需太多的人工干预,有利于减少重复的操作过程,可以节省时间、费用和工作量。
l 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能。
l 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
l 对开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在SVN、Git仓库即可。
l 对运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新。
l 对测试人员:可以通过jenkins进行简单的代码及网站测试。
1.5. 产品发布流程
产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线
Ø 传统上线流程:
Ø 自动化上线流程:
Ø Jenkins上线流程:
1.1. 硬件要求
l 标准配置:
CPU: 8核心2.0GHz
内存: 16GB
硬盘: 100GB
网卡: 2*1000Mbps
l 最低配置:
CPU: 4核心2.0GHz
内存: 4GB
硬盘: 50GB
网卡: 100Mbps
1.2. 系统要求
Linux
l CentOS 6.9
l CentOS 7.4
JDK
l JDK 1.8
1.3. 网络要求
l 准备一个块网卡支持千兆
2. Jenkins 安装
2.1. 准备环境
l 下载Jdk、tomcat、Jenkins、maven
l 安装Jdk
# tar -xf jdk-8u181-linux-x64.tar.gz –C /usr/local/
# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
# source /etc/profie
测试一下
# java -version
l 安装tomcat
# tar -xf apache-tomcat-7.0.90.tar.gz -C /opt
l 安装maven
# tar zxvf apache-maven-3.5.4-bin.tar.gz
# vim /etc/profile
export M2_HOME=/usr/local/apache-maven-3.5.4
export PATH=$M2_HOME/bin:$PATH
# source /etc/profie
测试一下
# mvn -v
2.2. 安装Jenkins
l 方法1:WAR包 直接启动war包
wget http://mirrors.shu.edu.cn/jenkins/war-stable/2.121.3/jenkins.war
java -jar jenkins.war --httpPort=8088
tomcat+WAR包
cp jenkins.war /usr/local/apache-tomcat-7.0.90/webapps/ROOT
/usr/local/apache-tomcat-7.0.90/bin/startup.sh
l 方法2:RPM包yum安装 【不推荐yum安装】
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo
yum –y install Jenkins
service jenkins start或systemctl start jenkins
RPM包rpm安装
# rpm -ivh jenkins-2.32.3-1.1.noarch.rpm
# 下载地址:【选择redhat-stable稳定版】
# 官方下载地址:https://pkg.jenkins.io/redhat-stable/
# 国内下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
如果是公司使用选择(LTS) stable稳定版。
如果是个人使用可以选择最新版
2.3. 安装插件
说明:
安装Maven程序是为了编译代码打包代码,调用方法是Jenkins通过Maven插件调用Maven服务。所以想使用相关服务除了本地部署服务外,还需要在jenkins上安装插件。
l 完成必备的插件
l 安装可选插件
Maven Integration plugin
Subversion Plug-in
2.4. 配置Jenkins
l jdk/maven
浏览器登录Jenkins,进入“系统管理” -> “Global Tool Configuration”,配置jdk和maven后保存:
2.5. 服务启动
l
执行java -jar jenkins.war --httpPort=8099
l 执行systemctl start jenkins
3. Jenkins自动构建
l 创建一个maven项目
l 新建的任务页面,点击“立即构建
丢弃旧的构建:
保持构建的天数 【超过一定天数就删除】
保持构建的最大个数 【超过一定数量就删除】
填写svn信息
填写maven参数
4. Jenkins自动部署
1)配置tomcat服务器基线
2)tomcat版本路径统一
3)jdk版本路径统一
4)项目名与端口号统一
5. Jenkins权限管理
在工作的过程中由于分工合作,因为工作内容的不同可能分为不同的组织里,但是jenkins默认的权限管理并没有用户组的概念,所以我们需要第三方插件的支持来解决问题。
注意:切换不同管理权限的方式 这个插件会导至以前配置好的权限丢失,所以可以用备份来弥补。
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
l 安装Role Strategy Plugin插件
注意:
1)job_read只加Overall的Read权限
2)job_create只加job的create权限
3)project roles中Pattern正则表达式跟脚本里的不一样,比如过滤TEST开头的jobs,要写成TEST.*而不是TEST*
按环境或项目将权限分组,再将用户划分到对应的权限即可。如下图所示
l 设置全局角色(全局角色可以对jenkins系统进行设置与项目的操作)
l 设置项目角色(项目角色只能对项目进行操作)
开发人员只能看到所属自己的项目
管理员可以看到全部项目信息
6. jenkins常见问题
问题1:jenkins 配置安全策略admin没有Overall/Read权限
解决方案:
命令:vim /root/.jenkins/config.xml
<permission>hudson.model.Hudson.Administer:anonymous</permission>
<permission>hudson.model.Hudson.ConfigureUpdateCenter:anonymous</permission>
<permission>hudson.model.Hudson.Read:anonymous</permission>
<permission>hudson.model.Hudson.RunScripts:anonymous</permission>
<permission>hudson.model.Hudson.UploadPlugins:anonymous</permission>
重启jenkins服务
问题2:admin密码更改后忘记
解决方案:
删除Jenkins目录下config.xml文件中下面代码,并保存文件。