一、前言
1、主要内容
- Jenkins+SSH获取Gitee代码
- Jenkins+Maven构建Java(Spring Boot)项目配置
- Jenkins发布Spring Boot项目:远程服务器端配置
- Jenkins发布Spring Boot项目:pom.xml编译配置
- Jenkins+SSH将构建输出结果发布到远程服务器并启动应用
2、环境信息
- 服务器
服务器名 | 操作系统 | IP | 说明 |
---|---|---|---|
Gitee | CentOS 7 | 192.168.88.41 | 部署Gitee |
Jenkins | CentOS 7 | 192.168.88.44 | 部署Jenkins |
Server | CentOS 7 | 192.168.88.101 | 部署Java项目 |
- 软件
工具/环境 | 版本 |
---|---|
Jenkins | 2.176.2 |
Maven | 3.6.1 |
Gitee | Gitee 12.1.2 |
JDK | 1.8.0_181 |
3、基础准备
二、 Java应用部署服务器
1、部署JDK8
如果将jdk1.8.0_181
部署在目录/usr/java/
部署完成后,jdk的根目录就是:/usr/java/jdk1.8.0_181/
2、创建部署应用专用账号(非必须)
#创建账号
sudo useradd app
sudo passwd app
#授予sudo权限且免密码
sudo visudo
#在最后一行加上
app ALL=(ALL) NOPASSWD:ALL
3、开放端口
#开放1000到9999的端口
sudo firewall-cmd --add-port=1000-9999/tcp --permanent
sudo firewall-cmd --reload
4、创建应用部署目录
#创建目录
sudo mkdir -p /webroot
#授权
sudo chmod-R 777 app:app /webroot
三、Jenkins环境准备
在配置构建任务之前,我们需要在Jenkins服务器配置Maven、Git环境
1、Maven安装
- 下载&解压
cd /home/downloads
#下载
sudo wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
#下载方式2
官网地址:[http://maven.apache.org/download.cgi](http://maven.apache.org/download.cgi)
使用工具或者命令传到服务器上
#解压到指定目录
sudo mkdir -p /usr/maven
sudo tar -zvxf apache-maven-3.6.1-bin.tar.gz -C /usr/maven
- 配置环境变量
#修改/etc/profile
sudo vi /etc/profile
#在文件末尾写入以下内容
export MAVEN_HOME=/usr/maven/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH
#使更改生效
source /etc/profile
#测试
mvn -version
- 配置Maven仓库
为了保证jar包的下载速度,修改maven配置使用国内镜像
#进入Maven根目录
cd $MAVEN_HOME
#备份配置文件
sudo cp conf/settings.xml conf/settings.xml.bak
#新建配置文件或者在setting文件中添加阿里仓库
sudo vi settings.xml
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
2、Git Client安装
- 安装
sudo yum install -y git
- 密钥准备
#生成密钥
ssh-keygen -t rsa
- 将公钥添加到Gitee
#查看公钥
cat ~/.ssh/id_rsa.pub
访问Gitee:http://192.168.88.41:/profile/keys
,添加公钥
- 添加Git SSH凭据
后面配置Jenkins构建任务代码仓库时需要用到
#查询SSH私钥
cat ~/.ssh/id_rsa
访问:/credentials/store/system/domain/_/newCredentials
直接进入凭据添加界面
类型选择:SSH Username with private key
3、插件安装
- 插件列表
插件名 | 版本 | 说明 |
---|---|---|
Git | 3.11.0 | 使用Git访问远程仓库 |
Maven Integration | 3.3 | 使用Maven进行编译等 |
Publish Over SSH | 1.20.1 | 用于将编译结果发布到远程服务器 |
- 安装说明
访问:
http://192.168.88.44:9999/pluginManager/available
Ctrl+F
搜索插件名,勾选后,进行安装
安装完成后,重启jenkins
sudo systemctl restart jenkins
4、Jenkins插件/环境配置
在菜单:系统管理->全局工具配置中对插件相关工具进行配置
查看java /git 所在位置: which java / which java git
- JDK配置
- Git配置
- Maven配置
- Publish over SSH(设置中没有此选项需先安装插件)(需要部署到指定服务器使用,可选)
然后在菜单:系统管理->系统设置对Publish over SSH进行设置
主要配置项说明:
配置项 | 说明 |
---|---|
Name | 服务器名,随便写,方便记忆即可 |
Hostname | 服务器IP,或者可以被正常解析的服务器名/域名 |
Username | 用于登录的账号 |
Remote Dictionary | 远程目录,绝对路径 |
Passphrase/Password | 密码 |
Port | SSH端口 |
配置完成后可以点击Test Configuration
进行连接测试
- Gitee配置(配置中需要先安装插件)
Gitee API V5 的私人令牌(获取地址 https://gitee.com/profile/personal_access_tokens)
四、Jenkins构建任务
1、Jenkins任务创建
菜单:新建任务,或者访问:/view/all/newJob
2、配置源代码管理
这里我们选择Git,并配置SSH Git地址,选择之前创建好的凭据/密钥
3、Publish over SSH配置(可选)
配置项说明:
配置项 | 值 | 说明 |
---|---|---|
Name | appserver | SSH Server名称,根据之前配置选择即可 |
Source files | target/*.jar | 需要传输的文件,支持通配符,编译文件默认都在项目根目录下的target目录中 |
Remove prefix | target | 移除匹配到的文件路径的前缀,如果留空,会在远程服务器上创建对应的目录 |
Remote directory | helloworld/ | 远程服务器上的项目目录,该目录会被创建在Publish over SSH配置的远程根目录中(/webroot) |
Exec command | —- | 文件传输到远程服务器后执行的命令 |
4、构建
5、配置构建maven和shell脚本
点击立即构建即可进行项目构建,构建完成后,构建记录的图标会根据构建结果不同显示成不同颜色。
蓝色、黄色、红色分别表示:成功、未完成、失败
如果构建并没有成功,可以点击构建记录,在后在控制台输出
中查看构建记录
例如:http://192.168.88.44:8080/job/maven-springboot-helloworld/13/console
同样,你也可以在控制台输出
中查看整个构建过程
如果构建成功,访问:http://192.168.88.101:8081
,将会看到
Hello World!
6、完善构建脚本(自选)
执行文件创建与复制时需要权限,需提前赋予文件权限
#!/bin/bash
BUILD_ID=DONTKILLME
# jenkins 构建的工作路径,test2是任务名称,注意改
# JAR_PATH="/root/.jenkins/workspace/app_fast"
# 项目 打包之后的路径
PROJ_PATH="/webroot/helloworld"
# 打包后的名称
JAR_NAME="app-fast"
# 文件的后缀
FILE_TYPE="jar"
# 备份的文件夹名称
BACKUP="backup"
### base函数
kill()
{
pid=`ps -ef | grep $JAR_NAME.$FILE_TYPE |grep -v color |grep -v grep | awk '{print $2}'`
echo "$JAR_NAME pid is ${pid}"
if [ "$pid" = "" ]
then
echo "no $JAR_NAME pid alive"
else
echo "killing start"
sudo kill -9 $pid
echo "killing end"
fi
}
#停止之前的进程
echo "killing before"
kill
echo "killing after"
#创建备份目录
cd $PROJ_PATH
if [ ! -d "$BACKUP" ];then
sudo mkdir -p $BACKUP
cd $BACKUP
sudo mkdir log
fi
echo $PROJ_PATH
cd $PROJ_PATH
#创建运行目录
if [ ! -d run ];then
sudo mkdir -p run
fi
#备份之前的版本
cd $PROJ_PATH/run
if [ -f "$JAR_NAME.$FILE_TYPE" ];then
sudo mv $JAR_NAME.$FILE_TYPE $PROJ_PATH/$BACKUP/$JAR_NAME$(date "+%Y%m%d%H%M%S").$FILE_TYPE
fi
if [ -f "print.out" ];then
sudo mv print.out $PROJ_PATH/$BACKUP/log/print$(date "+%Y%m%d%H%M%S").out
fi
#将打包好的文件移动到run上
cd $PROJ_PATH
if [ -d target ];then
cd target
sudo mv $JAR_NAME.$FILE_TYPE $PROJ_PATH/run/$JAR_NAME.$FILE_TYPE
cd ../
fi
#启动服务
cd $PROJ_PATH/run
# 启动的是prod环境的配置
nohup java -jar -Dspring.profiles.active=prod $JAR_NAME.$FILE_TYPE >print.out 2>&1 &