一 Jenkins搭建
1 下载
Jenkins 下载地址 注意发行版本对JDK版本的依赖,这里下载版本2.346.3
1 | mkdir /opt/jenkins |
2 启动
Jenkins最新版本不再支持java1.8,下载JDK11与war同目录, 下载地址,下载压缩包版本
1 | mkdir /opt/jenkins/jdk11 |
下载好后解压
1 | tar zxvf jdk-11.0.19_linux-x64_bin.tar.gz |
尝试启动,启动命令指定JDK
1 | /opt/jenkins/jdk11/jdk-11.0.19/bin/java -jar jenkins.war --httpPort=8182 |
看到初次启动会显示一个默认密码,访问启动的8182端口并输入日志中的密码
3 Jenkins配置
选择安装推荐插件,并等待下载
安装完成后创建管理员用户
完成后跳转到配置实例页面,默认不动
点击「保存并完成」按钮,完成实例的配置。进入首页
4 编写启动脚本
脚本名start.sh
,日志路径/opt/jenkins/logs/jenkins.log
1 | LOG_PATH=/opt/jenkins/logs/jenkins.log |
授权并启动
1 | chmod 777 start.sh |
5 安装其他插件
在菜单中选择
Manage Jenkins -> Manage Plugins
进入插件管理,选择可选插件选项卡,安装如下插件
- Maven Integration
- Maven Info
- Publish Over SSH
- Extended Choice Parameter
- Git Parameter
勾选安装完成后重启,等待安装完毕。
6 JDK配置
从首页开始,按照「Manage Jenkins -> Global Tool Configuration」的顺序,进入「Global Tool Configuration」界面。如下图所示:
点击新增JDK,添加本地JDK路径
7 maven配置
需要安装并配置好maven,本文不再赘述
8 SSH配置
通常来说通过 SSH 复制构建出来的 jar 包到远程服务器上,需要进行 SSH 配置。使用账号密码的认证方式,实现 SSH 连接到远程服务器。
这里Jekins与测试的远程服务器在用一台机器,hostname配置为本机,其他机器配置为对应ip即可。
Jenkins 首页开始,按照「Manage Jenkins -> Configure System」的顺序,进入「配置」界面,然后下拉到最底部。如下图所示:
二 准备测试用项目
1 项目目录
创建项目目录如下
其中:
testProject.jar
:项目的jar
包。build
目录:Jenkins 构建完项目后的新jar
包,会上传到build
目录下,避免对原jar
包覆盖,导致无法正常关闭 Java 服务。backup
目录:对历史jar
包的备份目录。每次使用新的jar
启动服务时,会将老的jar
移到backup
目录下备份。shell
目录:脚本目录。
2 启动脚本
在shell
目录下新建脚本deploy.sh
,代码如下
1 | !/bin/bash |
下面对其中部分函数进行解释
stop
首先,获得到 Java 服务对应的 PID 进程编号。
然后,先
kill -15
对应进程,尝试正常关闭 Java 服务。考虑到整个关闭是一个过程,所以我们需要等待一段时间,直到 Java 服务正常关闭。最后,万一 Java 服务无法正常关闭,则
kill -9
对应进程,强制关闭 Java 服务。
healthCheck
和 Java 服务的关闭一样,Java 服务的启动也是一个过程。这里提供了两种策略:1)通过健康检查 URL,自动判断应用是否启动成功。2)未配置健康检查 URL 的情况下,我们通过 sleep 60 秒,然后查看日志,人工判断是否启动成功。
健康检查的 URL,我们通过 Spring Boot Actuator 提供的
health
端点,判断请求返回的状态码是否为 200 。如果是,则说明应用健康,启动完成。具体参考《芋道 Spring Boot 监控端点 Actuator 入门》的「4. health 端点」小节准备好配置有Spring Boot Actuator健康检查的项目
三 Jenkins部署任务配置
从 Jenkins 首页开始,点击「新建Item」按钮,进入 Jenkins 任务创建界面。输入任务名,并选择构建一个 Maven 项目。如下图所示:
进入配置页面,下面分选项卡讨论
1 General
- Maven Info Plugin Configuration
- Discard old builds 配置项:设置保留的构建。因为会不断的重新构建项目,如果不进行设置,Jenkins 所在服务器的磁盘占用可能会过高。
- This project is parameterized 配置项:参数化构建。这里,我们使用 Git Parameter 插件,创建了参数名为
BRANCH
,值为 Git 项目的 Branch/Tag。如此,我们在后续的项目构建中,可以选择构建的 Git 项目的分支/标签。
2 源码管理
- 选择 Git,配置git仓库。
- Repositories 配置项:设置使用的 Git 仓库。这里可以直接使用 https://github.com/YunaiV/SpringBoot-Labs 仓库,艿艿已经准备好了示例项目。
- Branches to build 配置项:设置使用的 Git 分支/标签。这里,我们使用「② Maven Info Plugin Configuration」配置的构建参数
BRANCH
3 构建触发器、构建环境、Pre Steps****
暂不需要配置
4 Build
- Root POM 配置项:设置根
pom.xml
配置文件。一般情况下,设置pom.xml
即可。 - Goals and options 配置项:设置 Maven 构建命令。
- 如果只想构建子 Maven 模块,所以使用
-pl 父模块名/子模块名
参数。 - 这里构建整个项目使用
clean package -Dmaven.test.skip=true
命令。
- 如果只想构建子 Maven 模块,所以使用
5 Post Steps
选择Run only if build succeeds
6 构建后操作
选择Send build artfacts over SSH
配置将 Maven 构建出来的 jar
包,通过 SSH 发送到远程服务器,并执行相应脚本,进行启动 Java 服务。如下图所示:
Transfer Set Sources files 配置项:设置传输的文件。此处配置
target/*.jar
即可。Remove prefix 配置项:设置传输的文件,需要移除的前缀。此处配置
target/
Remote directory 配置项:传输到远程服务器的目录。这里配置
/opt/jenkins/project/build
目录地址Exec command 配置项:设置传输完文件后,执行的 Shell 命令。这里配置
cd /opt/jenkins/project/shell && ./deploy.sh
命令,表示执行部署脚本,进行启动 Java 服务。Exec in pty 配置项:勾选,表示模拟一个终端执行脚本。
点击下面的「高级」按钮,将「Fail the build if an error occurs」选项选择上。
四 开始构建
点击左边「Build with Parameters」菜单,进行参数化构建,进行项目的部署。如下图所示:
在构建历史中可以看到控制台输出
可以看到项目成功构建