一、 什么是Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
Jenkins可扩展的持续集成引擎 - 图1

二、 安装Jenkins

1 下载Docker镜像

docker pull jenkinsci/blueocean

2 创建并启动容器

jenkins启动后占用两个端口号。分别是8080和50000。创建容器时,额外提供的端口映射8181是后续测试自动构建的Spring Boot项目占用的端口。

docker run -d -p 8080:8080 -p 50000:50000 -p 8181:8181 —name jenkins jenkinsci/blueocean

商业化环境中,Jenkins是由运维人员管理维护,会使用远程控制的方式来动态构建项目。不需要特殊提供额外的端口映射(8181)。

3 初始化

jenkins第一次启动的时候耗时较长,一般需要3~10分钟左右。完整启动后,可以访问”http://docker宿主机IP:8080/“ 进入jenkins控制台。
Jenkins可扩展的持续集成引擎 - 图2
初始密码在docker日志中可见,也可以在文件/var/jenkins_home/secrets/initialAdminPassword 中查看。
Jenkins可扩展的持续集成引擎 - 图3

4 下载插件

Jenkins安装后,只有基本控制能力。想完成持续构建工作,则需要下载若干插件。其中推荐插件为jenkins社区中最常用的插件组,可以处理绝大多数持续集成需求。
Jenkins可扩展的持续集成引擎 - 图4

安装插件需要一定时间,需耐心等待。
Jenkins可扩展的持续集成引擎 - 图5

5 创建管理员

Jenkins可扩展的持续集成引擎 - 图6

6 实例配置[可选,可跳过]

实例配置是用于设置当前jenkins控制台的访问URL。默认是当前Jenkins所在服务器IP:8080。如需设置域名或主机名访问,可以手工修改;当前也可以跳过。
Jenkins可扩展的持续集成引擎 - 图7

7 安装完成

Jenkins可扩展的持续集成引擎 - 图8

8 初始控制台

下图为初始控制台样式,不同版本略有不同。
Jenkins可扩展的持续集成引擎 - 图9

三、 配置Jenkins

进入全局配置页面
Jenkins可扩展的持续集成引擎 - 图10

1 配置JDK

访问jenkins容器,并查看容器中安装的JDK路径,即环境变量JAVA_HOME。
Jenkins可扩展的持续集成引擎 - 图11
设置jenkins中的JDK。具体如下图:
Jenkins可扩展的持续集成引擎 - 图12

2 配置Maven

Jenkins可扩展的持续集成引擎 - 图13
Jenkins可扩展的持续集成引擎 - 图14

3 配置GIT

Jenkins可扩展的持续集成引擎 - 图15

4 保存配置

在配置页面底部由保存配置按钮。必须点击保存。否则当前页面中所有配置不生效。
Jenkins可扩展的持续集成引擎 - 图16

四、 项目管理

1 新建Item

新建名称为test-jenkins-1的项目。
Jenkins可扩展的持续集成引擎 - 图17 Jenkins可扩展的持续集成引擎 - 图18

2 项目基本信息

Jenkins可扩展的持续集成引擎 - 图19

3 项目源码管理

设置项目源码仓库地址。并选择配置需要管理的分支或登录凭证。
Jenkins可扩展的持续集成引擎 - 图20
Jenkins可扩展的持续集成引擎 - 图21

4 构建环境

Jenkins可扩展的持续集成引擎 - 图22

5 构建

5.1 添加顶层Maven目标

Jenkins可扩展的持续集成引擎 - 图23
Jenkins可扩展的持续集成引擎 - 图24

5.2 添加Shell脚本

Jenkins可扩展的持续集成引擎 - 图25
Jenkins可扩展的持续集成引擎 - 图26
具体脚本内容如下:

#!/bin/bash

ID=ps -ef | grep "test_jenkins" | grep -v "grep" | awk '{print $1}'

kill -9 $ID

cd /var/jenkins_home/workspace/test-jenkins-1/target

rm -rf ~/test_jenkins-1.0-SNAPSHOT.jar

cp ./test_jenkins-1.0-SNAPSHOT.jar ~/test_jenkins-1.0-SNAPSHOT.jar

BUILD_ID=dontKillMe

nohup java -jar ~/test_jenkins-1.0-SNAPSHOT.jar &

5.2.1 脚本含义

!/bin/bash 代表下述命令基于bash环境脚本化执行。

ID=ps -ef | grep "test_jenkins" | grep -v "grep" | awk '{print $1}' 基于ps命令查看进程信息。基于grep命令过滤需要的查询的进程信息(当前构建的项目,其项目名称是test_jenkins,过滤的时候基于项目名称筛选需要的进程);和需要剔除的信息(使用-v参数,提出筛选出的grep进程信息)。基于awk命名查看具体的进程编号($数字代表输出第几个信息)。并保存进程编号到变量ID中。

kill -9 $ID 使用kill命令杀死对应编号的进程。

cd /var/jenkins_home/workspace/test-jenkins-1/target 进入到jenkins中当前项目的工作目录,此地址由固定地址格式,具体是 /var/jenkins_home/workspace/项目名称/target。其中target是maven项目中编译后的目标目录。

rm -rf ~/test_jenkins-1.0-SNAPSHOT.jar 删除当前登录用户主目录中的jar文件。即当前任务构建后的jar文件。

cp ./test_jenkins-1.0-SNAPSHOT.jar ~/test_jenkins-1.0-SNAPSHOT.jar 复制当前构建任务打包后的jar文件到当前登录用户主目录中。

BUILD_ID=dontKillMe 通知jenkins,不要杀死当前构建过程中开启的其他进程。(默认情况下,jenkins在一次构建任务结束后,立刻关闭|杀死所有当前构建任务开启的其他进程,保证整体环境的安全。)

nohup java -jar ~/test_jenkins-1.0-SNAPSHOT.jar & 开启新的进程,并启动当前构建任务打包的jar应用。