Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!
:
一、导语
二、Jenkins 介绍
三、基础环境准备
四、Jenkins安装
五、Jenkins配置
六、源码构建、打包、部署、运行
七、常见问题汇总
八、后记
九、黑色小幽默
一、导语
Jenkins 是一个可扩展的持续集成引擎。接下来,我将通过两篇文章来全面介绍jenkins的基本概念,安装、配置、自动构建、监控、部署,以及在生产环境的高级应用。
方便读者更好的理解,本文演示案例所使用的源代码和脚本,均提供git下载地址。
https://github.com/wzjgn/xinwei-example.git
源码基于spring boot框架,maven管理,wrapper启动。
二、Jenkins 介绍
主要用途:
1、持续、自动地构建/测试软件项目。
2、监控一些定时执行的任务。
Jenkins特性:
1、易于安装-本文提供四种配置方式。
2、易于配置-所有配置都是通过其提供的web界面实现。
3、集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。
4、生成JUnit/TestNG测试报告。
5、分布式构建支持Jenkins能够让多台计算机一起构建/测试。
6、文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
7、插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。
8、Jenkins一切配置都可以在web界面上完成。有些配置如MAVEN_HOME和Email,只需要配置一次,所有的项目就都能用。当然也可以通过修改XML进行配置。
9、支持Maven的模块(Module),Jenkins对Maven做了优化,因此它能自动识别Module,每个Module可以配置成一个job。相当灵活。
10、测试报告聚合,所有模块的测试报告都被聚合在一起,结果一目了然,使用其他CI,这几乎是件不可能完成的任务。
11、构件指纹(artifact fingerprint),每次build的结果构件都被很好的自动管理,无需任何配置就可以方便的浏览下载。
三、基础环境准备
本文对Jenkins的讲解,基于 jdk1.8,maven,git,ssh 做自动构建、部署等功能演示。
3.1、JDK安装:
下载linux jdk-8u11-linux-x64.tar.gz
到甲骨文官网或国内镜像下载JDK(www.oracle.com)
解压:
tar vxf jdk-8u11-linux-x64.tar.gz
配置环境变量:
#set Maven environment vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_11
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
环境变量立即生效
source /etc/profile
3.2、maven安装:
下载maven
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
解压
tar xzvf apache-maven-3.5.2-bin.tar.gz
mv apache-maven-3.5.2 /usr/local/maven3
配置环境变量
#set Maven environment vi /etc/profile
export MAVEN_HOME=/usr/local/maven3
export PATH=${MAVEN_HOME}/bin:${PATH}
环境变量立即生效
source /etc/profile
验证maven是否配置成功
mvn -v
3.3、git 安装:
yum -y install git
用git --version命令检查是否已经安装
3.4、 从git服务器下载源码 ssh免密配置:
jenkins 构建代码时,动态从git源码服务器pull源码,免密配置 ssh。
第一步 :生成key
$ ssh-keygen -t rsa -C "you email@email.com" 或者去掉 -t rsa
接下来会提示你输入一个文件名来保存你的SSH key ,如果不输入直接回车,则会保存在默认的文件里id_rsa.pub
然后会提示你输入passphrases 连续输入两次,这在你在网页中添加SSH key的时候会让你输入一次。
以上提示输入的地方可以为空,敲回车就好。
ssh key默认存放地址:/root/.ssh/
id_rsa.pub:公钥(用于远端服务器)
id_rsa:私钥
第二步:将公钥(id_rsa.pub 中的内容)添加的git源码服务器
将公钥文件 id_rsa.pub 中的内容拷贝到git源码服务器。以阿里云为例。
验证:
在存放私钥的服务器终端执行如下命令:
ssh -T git@code.aliyun.com
返回 Welcome to GIT, 用户名! 成功
第三步:将私钥添加到jenkins
创建项目时添加
由于我们在生产key时,默认回车,没有输入密码,所以此处Passphrase为空。
四、Jenkins安装
以下四种方法任选一种,我本人使用第一种方式。
1、 在线安装
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key## 公钥
sudo yum install jenkins -y
2、 离线安装
## http://pkg.jenkins-ci.org/redhat/
wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm ## 下载(也可以Windows下载再转过来)
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.key ## 公钥
sudo yum -y install jenkins-*.noarch.rpm
3、基于 Tomcat 安装
安装并启动 Tomcat;
从官网下载 jenkins.war 至 $CATALINA_BASE/webapps,Tomcat 会自动部署;
浏览器访问:http://centos:8080/jenkins/
4、免安装方式
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
sudo java -jar jenkens.war ## 启动服务,直至看到日志 `Jenkins is fully up and running`
curl http://localhost:8080/ ## Jenkins 已就绪
配置
## sudo vi /etc/sysconfig/jenkins
JENKINS_USER="root" ## 原值 "jenkins" 必须修改,否则权限不足
JENKINS_PORT="8080" ## 原值 "8080" 可以不修改
## 还有开启 HTTPS 相关参数,此处不打算开启,故不作说明
Jenkins安装目录: /usr/lib/jenkins
Jenkins工作目录: /var/lib/jenkins(对应于环境变量 JENKINS_HOME)
构建项目源码目录:/var/lib/jenkins/workspace
日志默认路径:/var/log/jenkins/jenkins.log
启动
sudo systemctl enable jenkins
sudo systemctl restart jenkins
或
service jenkins start
五、Jenkins配置
基本配置
5.1、登录
初始密码获取:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
5.2、密码修改
登录主页-用户-选择用户(admin)-设置-输入新密码
5.3、Jenkins插件安装
Jenkins 插件管理器允许您安装新的插件,和更新您Jenkins服务器上的插件。管理者将连接到联机资料库,检索可用的和已更新的插件。如果您的Jenkins服务器 无法直接连接到外部资源,您可以从Jenkins网站上下载。
在已运行的Jenkins主页中,点击左侧的系统管理—>管理插件进入如下界面:
安装插件:Git plugin,ssh plugin
5.4、JDK、Maven、Git配置
jenkins 构建,依赖JDK、Maven、Git 插件,因此项目构建前需要对插件做配置,配置流程如下:
进入 系统管理-全局工具配置:
Maven别名:用户自定义,便于标识就可以。
MAVEN_HOME:这个是本机MAVEN的安装路径。见上文第二部分 MAVEN安装。(错误的路径会有红字提示你的)
自动安装:不推荐这个选项
上文第二部分git安装完毕后,此处默认配置完毕
JDK别名:用户自定义,便于标识就可以。
JDK_HOME:这个是本机JDK的安装路径。见上文第二部分 JDK安装。(错误的路径会有红字提示你的)
自动安装:不推荐这个选项
六、源码构建、打包、部署、运行
(基于springboot,maven,git,ssh)
6.1、 新建项目
源码管理:
Repository URL:
git@github.com:wzjgn/xinwei-example.git
或
https://github.com/wzjgn/xinwei-example.git
如果Repository URL 地址有误,此处会报错,如:
Add ,添加源码访问凭证。
本案例通过ssh key 访问git源码服务器。因此,在此处添加ssh私钥(ssh公钥已经部署到github)
(添加ssh私钥)
本文生成ssh key时,提示输入密码时默认回车,因此此处passphrase ,id.填空。
构建触发器
选择“Build whenever a SNAPSHOT dependency is built” :依赖于快照的构建,当git有修改时就构建项目。
Build periodically :此选项仅仅通知Jenkins按指定的频率对项目进行构建,而不管SCM是否有变化。如果想在这个Job中运行一些测试用例的话,它就很有帮助。
Poll SCM :这是CI 系统中常见的选项。当您选择此选项,您可以指定一个定时作业表达式来定义Jenkins每隔多久检查一下您源代码仓库的变化。如果发现变化,就执行一次构建。例如,表达式中填写0,15,30,45 * * * *将使Jenkins每隔15分钟就检查一次您源码仓库的变化。
构建:
默认Jenkins在workspace目录下面找到pom.xml文件。
如下图项目目录结构,此处配置执行的是 pom.xml 3,即构建1,2两个pom.xml对应的项目。
如果要构建 pom.xml 1 则此处 Root POM : xinwei-wrapper-example/pom.xml.
Post Steps
配置构建成功后的动作,添加shell。该案例源码是基于springboot架构,wrapper启动。
相关背景知识请查看上一篇文章《轻量级微服务启动wrapper推荐(springboot版,附github源码)》
脚本作用:
1、关闭原应用程序进程
2、解压新生成的tar包
3、wrapper启动重构后的应用
脚本
https://github.com/wzjgn/xinwei-example.gitxinwei-example/script/Post Steps(local)
(本例主要是jenkins的基本应用,故,此处脚本的意义是在本机做项目部署,启动。实际应用中,Jenkins通常都是应用在分布式系统,同时分发部署多台服务器。下篇Jenkins进阶文章将对远程部署、管理做详细讲解,尽可能接近生产环境)
邮件通知设置
在Recipients中输入收件人邮件地址,如果用多个收件人用“,”英文逗号隔开。
6.2、构建
手动触发项目构建流程:
在上面展示的截图中,您将注意到有两个图标描述当前作业的状态。S栏目代表着“最新构建状态”,W栏目代表着“构建稳定性”。Jenkins使用这两个概念来介绍一个作业的总体状况:
构建状态:下图中分级符号概述了一个Job新近一次构建会产生的四种可能的状态:
Successful:完成构建,且被认为是稳定的。
Unstable:完成构建,但被认为不稳定。
Failed:构建失败。
Disabled:构建已禁用。
构建状态界面
构建稳定性: 当一个Job中构建已完成并生成了一个未发布的目标构件,如果您准备评估此次构建的稳定性,Jenkins会基于一些后处理器任务为构建发布一个稳健指数 (从0-100 ),这些任务一般以插件的方式实现。它们可能包括单元测试(JUnit)、覆盖率(Cobertura )和静态代码分析(FindBugs)。分数越高,表明构建越稳定。下图中分级符号概述了稳定性的评分范围。任何构建作业的状态(总分100)低于80分就是不稳定的。
双击上图 项目名称,进入该项目的控制台,如下图:
在控制台点击“立即构建”,BuildHistory 列表第一条记录展示项目当前的构建进度条。点击 “项目构建进度条”,进入监控页面。查看构建过程,日志。
6.3、构建完毕,访问地址
七、常见问题汇总
Jenkins默认会在Build结束后Kill掉所有的衍生进程,导致后台无法运行应用程序。
在Post Steps ->Execute Shell 中配置的应用程序启动脚本启动后,当Build结束,进程会被Jenkins杀掉。为了在退出Build时继续运行程序,需要进行以下配置,才能避免此类情况发生。
7.1 方式一
a、重设环境变量build_id
在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的应用程序进程
b、在启动jenkins 的时候禁止jenkins杀死衍生进程
修改/etc/sysconfig/jenkins配置,在JENKINS_JAVA_OPTIONS中加入-Dhudson.util.ProcessTree.disable=true。需要重启jenkins生效。此方法配置一次后,所有的job都无需设置BUILD_ID,就能够防止jenkins杀死启动的应用程序进程。
7.2、方式二
添加 Post build task插件,在 Post build task 处执行脚本。
每当检测到项目编译信息中包含log text中的文本即执行script中的shell脚本。此处执行脚本启动的进程,jenkins不会自动kill。
本文转自 https://blog.csdn.net/xl_lx/article/details/80688556,如有侵权,请联系删除。