Jenkins 配置部署
Jenkins
配置部署
Jenkins
配置部署简介
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用;常用的版本管理系统有SVN、GIT,构建工具有Maven、Ant、Gradle。其具备以下特点:
- 易于安装:不需要安装、不需要数据库,只需通过java -jar jenkins.war或部署到一个servlet容器中。
- 易于配置:所有的配置都可能通过Jenkins提供的web界面完成,当然如果你喜欢,也可以通过手动修改xml文件进行配置。
- 消息通知及测试报告:能够生成各类测试报告并通过消息通知机制(Email等)进行报告,包括单元测试、覆盖率测试、静态分析等。
- 分布式构建:Jenkins支持多个Slave节点的动态挂载,完成分布式构建。
- 资源动态调度:Jenkins的容器资源通过Kubernetes动态调度,动态扩容收缩。
- 插件支持:Jenkins支持上千种插件,可以进行扩展,也可以根据需求近定制开发。
安装部署
以CentOS环境安装部署为例,详细介绍Jenkins安装部署整体过程和常用设置。
准备工作
环境准备
如果使用Jenkins.war包的形式进行安装,需要提前准备以下环境。
Java环境准备
去官网下载JDK
:
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
安装
- 将下载得到的
jdk-8u161-linux-x64.rpm
包保存到Linux
主机
# rpm -ivh jdk-8u161-linux-x64.rpm
环境变量
# vim ~/.bashrc
在文件的末尾添加以下行
export JAVA_HOME=/usr/java/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CLASSPATH
使环境配置生效
# source ~/.bashrc
测试Java
环境
# java -version
查看是否正常显示版本信息,若显示则安装成功
Tomcat环境准备
下载Tomcat
地址: http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz
# wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz
安装Tomcat
# tar zxvf apache-tomcat-8.5.32.tar.gz
# mv apache-tomcat-8.5.32 /usr/local/
配置Tomcat环境
# vim ~/.bashrc
在文件的末尾添加以下行
export CATALINA_BASE=/usr/local/apache-tomcat-8.5.32
export TOMCAT_HOME=/usr/local/apache-tomcat-8.5.32
export CATALINA_HOME=/usr/local/apache-tomcat-8.5.32
export PATH=$PATH:$CATALINA_HOME/bin:$CATALINA_HOME/lib
使环境配置生效
# source ~/.bashrc
启动Tomcat服务
# startup.sh
测试Tomcat
打开浏览器,在地址栏中输入http://IP:8080回车,如果看到Tomcat自带的一个JSP页面,说明你的Tomcat已搭建成功
安装部署
下载war文件
# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
安装Jenkins
将下载后的war包放到/usr/local/apache-tomcat-8.5.32/webapps/目录下,启动tomcat即可, 或者用命令java -jar jenkins.war
。
测试
打开浏览器输入http://IP:8080/jenkins回车即可看到jenkin初始配置界面,按照提示进行设置。
常用设置
邮件设置
Jenkins->系统管理->系统设置,弹出如下图所示:
- SMTP服务器:为邮箱服务地址。
- QQ: smtp.qq.com
- 163: smtp.163.com
- 用户默认后缀:可以自动识别,只需填写用户即可。
- 其他配置为Jenkins邮箱默认用户及采用的认证方式。
Job设置
在需要邮件通知的Job设置里面增加”构建后操作步骤” -> 选择E-mail Notification。
扩展插件设置
但是如果你群发的收件人列表比较多,或者每次通知的人不一样,比如每次只想通知导致构建失败的那个人(即最后一次上传代码的人),那么简单的E-mail Notification就不能满足要求,需要使用Email extension plugin插件。
SMTP server – 设置SMTP服务器地址
Default user E-mail suffix – 设置用户默认邮件后缀
Default Content Type – 默认内容类型(Plain Text HTML)
Default Subject – 默认邮件主题
Default Content – 默认邮件内容,可以设置模板
Default Triggers – 触发器
全局配置
根据实际情况勾选需要触发邮件通知的事件。点击上图右下角Default Trigger,弹出如下触发项:
- 项目配置
进入到具体的项目配置界面点击”配置,在配置界面点击”增加构建后操作步骤”,选择”Editable Email Notification”。
可以在“Advanced Settings”中针对该项目进行个性化的配置。可以针对该项目定义该项目通知的收件人列表、主题、内容、附件等。
任务创建
构建项目类型
点击 Jenkins 首页”创建一个新任务”的链接,弹出如下图所示页面。
Jenkins 提供了六种类型的任务。
构建一个自由风格的软件项目
这是Jenkins的主要功能。Jenkins 会结合任何 SCM 和任何构建系统来构建你的项目, 甚至可以构建软件以外的系统。Pipeline(流水线)
Orchestrates long-running activities that can span multiple build slaves. Suitable for building pipelines (formerly known as workflows) and/or organizing complex activities that do not easily fit in free-style job type. – 很难用一两句话说清 Pipeline, 参考 , 后面另起一文来介绍。构建一个多配置项目
适用于多配置项目,例如多环境测试、平台指定构建,等等。GitHub Organization
Scans a GitHub organization (or user account) for all repositories matching some defined markers. – 这个主要针对由 Github 托管的项目。Multibranch Pipeline(多分支流水线)
Creates a set of Pipeline projects according to detected branches in one SCM repository. 根据一个SCM存储库中检测到的分支创建一组 Pipeline 项目。文件夹
创建一个可以嵌套存储的容器。利用它可以进行分组。 视图仅仅是一个过滤器,而文件夹则是一个独立的命名空间, 因此你可以有多个相同名称的的内容,只要它们在不同的文件 夹里即可。
这里选择第一个:构建一个自由风格的软件项目, 输入项目名称:python test project ,点击”确定”按钮。
构建 Windows 测试任务
假设,有一个 Python 编写的测试脚本 py_tests.py ,其绝对路径为/root/py_tests.py,内容如下:
print "Hello world"
在Linux下怎么执行这个测试用例,打开终端
[root@centos-7 ~]# cd
[root@centos-7 ~]# ll py_tests.py
-rw-r--r--. 1 root root 20 8月 16 16:07 py_tests.py
[root@centos-7 ~]# python py_tests.py
Hello world
[root@centos-7 ~]#
下面回到Jenkins的配置过程中
添加项目的描述:Python 测试项目,打印Hello world。
剩下的选项都不要管,拖到页面底部,构建 选项。
选择执行shell
选项,执行Linux shell命令。
如上图,输入你在 Linux 终端下所输的命令python /root/py_tests.py
。 点击保存
。
一个极简的,基于 Linux 系统的 Python 脚本测试持续集成项目就创建完成了。
节点添加
Jenkins有个很强大的功能:分布式构建(在Jenkins的配置中叫做节点),分布式构建能够让同一套代码在不同的环境(如:Windows和Linux系统)中编译、测试等。而且Jenkins构建的代码和产物最后自动拷贝到主节点。
注意:如果节点主机上不存在JDK,Jenkins会去自动下载。
建议:所有Unix或者Windows机器的环境路径统一(如:JDK、Ant、Maven),好处是便于管理、不容易出现奇葩问题。
新建节点
系统管理 → 管理节点 → 新建节点(左上角),如下图所示:
节点名称:建议使用字母、数字或字母和数字的组合。最好见名知意。不建议使用标点符号和中文(中文命名没有问题,但Job中无法引用)。
配置节点
- Name(名称):节点名称
- Description(描述):节点描述,支持中文
- 并发构建数:最大同时构建数量(根据机器的性能定,单颗四核cpu建议不要超过5) - 必须为数字
- 远程工作目录:节点的根目录(注意:如果目录不存在,会自动创建目录。你必须对该目录有读写权限,不然会报错)
- 标签:标记(又叫做标签)用来对多节点分组,标记之间用空格分隔.例如’refression java6’将会把一个节点标记上’regression’和’java6’.
例来说,如果你有多个Linux系统的构建节点并且你的Job也需要在Linux系统上运行,那么你可以配置所有的Linux系统节点都标记为’windows’, 然后把Job也标记为’Linux’.这样的话你的Job就不会运行在除了Linux节点以外的其它节点之上了.
Linux用法:尽可能的使用这个节点/只允许运行绑定到这台机器的Job(根据你的需求,二选一)
- 启动方式:
- Linux节点:推荐 – Launch slave agents via SSH, 在Unix(包括Linux)机器上通过SSH通道连接节点 (适用于Unix和Linux)
- Host(主机):节点主机的ip地址
- Credentials:凭据(如果为空或者不可选择,请在系统管理→Manage Credentials中配置。Manage Credentials的配置非常简单,这里就不在描述了。Manage Credentials配置完成后,需刷新节点配置页面才会显示。)
节点连接
以Launch slave agents via SSH为例,选择Manually trusted key Verification Strategy,然后点击最下面的保存。
Jenkins -> 系统管理 -> 系统设置,设置SSH Server
- Name: 这个可以随意写
- Hostname: 远程主机的IP地址
- Username: 远程主机登录的用户名
- Remote Directory: 远程目录
如图设置好信息后,点击下面的保存
Jenkins -> 系统管理 -> 管理节点,点击刚刚配置好的节点,上线节点
回到节点列表后发现节点就已经成功上线了
角色权限
由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin,介绍页面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin。
配置插件
安装插件后,进入系统设置页面,配置如下:
配置权限
在系统管理页面点击Manage and Assign Roles进入角色管理页面
进入之后
- 管理角色(Manage Roles)
选择该项可以创建全局角色、项目角色,并可以为角色分配权限。
;如上图,分别创建了admin、anonymous两个全局角色,Online Program、test两个项目角色。
项目角色与全局角色的区别就是,项目角色只能管理项目,没有管理jenkins的权限配置。
添加项目角色时,需要指定匹配项目的模式,如上图中的Pattern,官方文档介绍该选项支持正则表达式,如”Roger-.”表示所有以Roger-开头的项目,(?i)roger-.*
表示以roger-开头的项目并且不区分大小写,如以ABC开头的项目可以配置为”ABC|ABC.*”,也可以使用”abc|bcd|efg”直接匹配多个项目。
- 创建用户
在分配角色之前需要先创建用户。
在系统管理页面,点击管理用户:
点击新建使用者可以创建新用户,点击用户ID或名称都可以修改用户信息。
选择Assign Roles可以为用户分配所属角色,可以分配全局角色和项目角色。
如上图,将不同的用户分别分配给不同的角色,这样用户就可以具有角色所拥有的权限。
运行与维护
Jenkins升级
- 说明:Jenkins迭代更新很频繁,一般1周更新一次,半年一个大版本。
- 升级:下载新的war包,替换旧的war包,重启即可。下载地址为http://mirrors.jenkins-ci.org/。
PS:升级前,请测试该版本和你本地数据的兼容性。如何测试:将JENKINS_HOME拷贝一份到新的机器,用新版的程序启动。测试对应的插件和配置。
Jenkins迁移和备份
首先找到JENKINS_HOME,一般在用户根目录下.jenkins目录,因为Jenkins的所有的数据都是以文件的形式存放在JENKINS_HOME目录中。所以不管是迁移还是备份,只需要操作JENKINS_HOME就行了。
迁移:建议将JENKINS_HOME打包后再拷贝,Windows上可以用zip,rar等,Linux上有zip,tar等。然后将打包的文件解压到新的JENKINS_HOME目录就行了。
备份:如果是临时备份,整个压缩文件就行了。
恢复:恢复的时候需要先停止jenkins。
移动,删除或修改jobs
对于移动或删除jobs,只需要简单地移动或删除$JENKINS_HOME/jobs
目录。
对于修改jobs的名字,只需要简单地修改$JENKINS_HOME/jobs
下对应job的文件夹的名字。
对于不经常使用的job,只需要对$JENKINS_HOME/jobs
下对应的jobs的目录zip或tar后存储到其他的地方。
Jenkins 启动时的命令行参数
--httpPort=$HTTP_PORT |
用来设置jenkins运行时的web端口。 |
---|---|
--httpsPort=$HTTP_PORT |
表示使用https协议。 |
~~~~–httpListenAddress=$HTTP_HOST | 用来指定jenkins监听的ip范围,默认为所有的ip都可以访问此jenkins server。 |
修改jenkins的timezone
如果jenkins所在的server的timezone不同于用户的timezone,这时候需要修改jenkins的timezone,需要在jenkins启动的时候增加下列参数-Dorg.apache.commons.jelly.tags.fmt.timeZone=TZ。
查看jenkins的系统信息
以在jenkins的管理页面下的系统信息中,查看所有的jenkins的信息,例如jenkins的启动配置,所依赖的系统的环境变量,所安装的plugins。
Jenkins中执行batch和Python
Jenkins的job -> build 支持Ant,maven,windows batch和Shell, 但是我们知道python,perl,ruby等脚本其实也是shell脚本,所以这里的Shell可以扩展为python,perl,ruby等。如图
Jenkins 整合 LDAP 以及 CAS 单点登录
参考另外一篇博客
Jenkins 整合 LDAP 以及 CAS 单点登录