Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

DevOpSec
• 阅读 1700

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

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

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源码服务器。以阿里云为例。

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

验证:

在存放私钥的服务器终端执行如下命令:

ssh -T git@code.aliyun.com

返回 Welcome to GIT, 用户名! 成功

第三步:将私钥添加到jenkins

创建项目时添加

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

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安装配置,项目发布、管理详解,史上最清晰,值得收藏!

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、登录

登录地址:http://localhost:8080/

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

初始密码获取:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

5.2、密码修改

登录主页-用户-选择用户(admin)-设置-输入新密码

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

5.3、Jenkins插件安装

Jenkins 插件管理器允许您安装新的插件,和更新您Jenkins服务器上的插件。管理者将连接到联机资料库,检索可用的和已更新的插件。如果您的Jenkins服务器 无法直接连接到外部资源,您可以从Jenkins网站上下载。

在已运行的Jenkins主页中,点击左侧的系统管理—>管理插件进入如下界面:

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

安装插件:Git plugin,ssh plugin

5.4、JDK、Maven、Git配置

jenkins 构建,依赖JDK、Maven、Git 插件,因此项目构建前需要对插件做配置,配置流程如下:

进入 系统管理-全局工具配置:

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Maven别名:用户自定义,便于标识就可以。

MAVEN_HOME:这个是本机MAVEN的安装路径。见上文第二部分 MAVEN安装。(错误的路径会有红字提示你的)

自动安装:不推荐这个选项

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

上文第二部分git安装完毕后,此处默认配置完毕

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

JDK别名:用户自定义,便于标识就可以。

JDK_HOME:这个是本机JDK的安装路径。见上文第二部分 JDK安装。(错误的路径会有红字提示你的)

自动安装:不推荐这个选项

六、源码构建、打包、部署、运行

(基于springboot,maven,git,ssh)

6.1、 新建项目

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

源码管理:

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Repository URL:

git@github.com:wzjgn/xinwei-example.git

https://github.com/wzjgn/xinwei-example.git

如果Repository URL 地址有误,此处会报错,如:

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Add ,添加源码访问凭证。

本案例通过ssh key 访问git源码服务器。因此,在此处添加ssh私钥(ssh公钥已经部署到github)

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

(添加ssh私钥)

本文生成ssh key时,提示输入密码时默认回车,因此此处passphrase ,id.填空。

构建触发器

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

选择“Build whenever a SNAPSHOT dependency is built” :依赖于快照的构建,当git有修改时就构建项目。

Build periodically :此选项仅仅通知Jenkins按指定的频率对项目进行构建,而不管SCM是否有变化。如果想在这个Job中运行一些测试用例的话,它就很有帮助。

Poll SCM :这是CI 系统中常见的选项。当您选择此选项,您可以指定一个定时作业表达式来定义Jenkins每隔多久检查一下您源代码仓库的变化。如果发现变化,就执行一次构建。例如,表达式中填写0,15,30,45 * * * *将使Jenkins每隔15分钟就检查一次您源码仓库的变化。

构建:

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

默认Jenkins在workspace目录下面找到pom.xml文件。

如下图项目目录结构,此处配置执行的是 pom.xml 3,即构建1,2两个pom.xml对应的项目。

如果要构建 pom.xml 1 则此处 Root POM : xinwei-wrapper-example/pom.xml.

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Post Steps

配置构建成功后的动作,添加shell。该案例源码是基于springboot架构,wrapper启动。

相关背景知识请查看上一篇文章《轻量级微服务启动wrapper推荐(springboot版,附github源码)》

脚本作用:

1、关闭原应用程序进程

2、解压新生成的tar包

3、wrapper启动重构后的应用

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

脚本

https://github.com/wzjgn/xinwei-example.gitxinwei-example/script/Post Steps(local)

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

(本例主要是jenkins的基本应用,故,此处脚本的意义是在本机做项目部署,启动。实际应用中,Jenkins通常都是应用在分布式系统,同时分发部署多台服务器。下篇Jenkins进阶文章将对远程部署、管理做详细讲解,尽可能接近生产环境)

邮件通知设置

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

在Recipients中输入收件人邮件地址,如果用多个收件人用“,”英文逗号隔开。

6.2、构建

手动触发项目构建流程:

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

在上面展示的截图中,您将注意到有两个图标描述当前作业的状态。S栏目代表着“最新构建状态”,W栏目代表着“构建稳定性”。Jenkins使用这两个概念来介绍一个作业的总体状况:

构建状态:下图中分级符号概述了一个Job新近一次构建会产生的四种可能的状态:

Successful:完成构建,且被认为是稳定的。

Unstable:完成构建,但被认为不稳定。

Failed:构建失败。

Disabled:构建已禁用。

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

构建状态界面

构建稳定性: 当一个Job中构建已完成并生成了一个未发布的目标构件,如果您准备评估此次构建的稳定性,Jenkins会基于一些后处理器任务为构建发布一个稳健指数 (从0-100 ),这些任务一般以插件的方式实现。它们可能包括单元测试(JUnit)、覆盖率(Cobertura )和静态代码分析(FindBugs)。分数越高,表明构建越稳定。下图中分级符号概述了稳定性的评分范围。任何构建作业的状态(总分100)低于80分就是不稳定的。

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

双击上图 项目名称,进入该项目的控制台,如下图:

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

在控制台点击“立即构建”,BuildHistory 列表第一条记录展示项目当前的构建进度条。点击 “项目构建进度条”,进入监控页面。查看构建过程,日志。

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

6.3、构建完毕,访问地址

http://localhost/

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

七、常见问题汇总

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。

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!

本文转自 https://blog.csdn.net/xl_lx/article/details/80688556,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这