最近项目组需要用Jenkins来做自动部署,于是lz研究了一下,顺便搞出这么个操作手册,废话不多说,内容如下:

目录:

一、导语

二、Jenkins 介绍

三、基础环境准备

四、Jenkins安装

五、Jenkins配置

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

七、常见问题汇总

 

一、导语

Jenkins 是一个可扩展的持续集成引擎。接下来,我将通过两篇文章来全面介绍jenkins的基本概念,安装、配置、自动构建、监控、部署,以及在生产环境的高级应用。

二、Jenkins 介绍

主要用途:

1、持续、自动地构建/测试软件项目。

2、监控一些定时执行的任务。

Jenkins特性:

1、易于安装-本文提供四种配置方式。

2、易于配置-所有配置都是通过其提供的web界面实现。

3、集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。

4、生成JUnit/TestNG测试报告。

5、分布式构建支持Jenkins能够让多台计算机一起构建/测试。

6、文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。

7、插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。

8Jenkins一切配置都可以在web界面上完成。有些配置如MAVEN_HOMEEmail,只需要配置一次,所有的项目就都能用。当然也可以通过修改XML进行配置。

9、支持Maven的模块(Module)JenkinsMaven做了优化,因此它能自动识别Module,每个Module可以配置成一个job。相当灵活。

10、测试报告聚合,所有模块的测试报告都被聚合在一起,结果一目了然,使用其他CI,这几乎是件不可能完成的任务。

11、构件指纹(artifact fingerprint),每次build的结果构件都被很好的自动管理,无需任何配置就可以方便的浏览下载。

三、基础环境准备

本文对Jenkins的讲解,基于 jdk1.8mavengitssh 做自动构建、部署等功能演示。

3.1JDK安装:

下载linux jdk-8u11-linux-x64.tar.gz

到甲骨文官网或国内镜像下载JDKwww.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.2maven安装:

下载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.3git 安装:

yum -y install git

git --version命令检查是否已经安装

3it服务器下载源码 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/webappsTomcat 会自动部署;

浏览器访问: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

windows下安装

https://pan.baidu.com/s/1qTSULpnqR2mnH8Cfd7_QIw

下载jenkins.war

直接放到tomcat的webapps下

启动tomcat,即可

五、Jenkins配置

基本配置

5.1、登录

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

5.3Jenkins插件安装

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

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

安装插件:Git pluginssh plugin

5.4JDKMavenGit配置

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

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

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

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

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

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

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

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

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

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

(基于springbootmavengitssh

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分钟就检查一次您源码仓库的变化。

构建:

默认Jenkinsworkspace目录下面找到pom.xml文件。

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

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

Post Steps

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

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

脚本作用:

1、关闭原应用程序进程

2、解压新生成的tar

3wrapper启动重构后的应用

脚本

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

邮件通知设置

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

6.2、构建

手动触发项目构建流程:

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

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

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

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

Failed:构建失败。

Disabled:构建已禁用。

构建状态界面

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

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

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

6.3、构建完毕,访问地址

http://localhost/

 

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

Logo

前往低代码交流专区

更多推荐