Jenkins,原名 Hudson,2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。
一、Jenkins安装
1.1 Linux下安装Jenkins
- 安装java运行环境
yum search java|grep jdk
yum install java-1.8.0-openjdk
- 安装git
yum -y install git
- 运行jenkins.war
nohup java -jar jenkins.war &
1.2 Docker安装Jenkins
- 拉取jenkins镜像
目前jenkins镜像不用了,要用jenkins/jenkins镜像
docker pull jenkins/jenkins
- 创建jenkins工作目录
mkdir /home/jenkins/jenkins_home
- 启动
docker run -u root -d -p 8080:8080 -p 50000:50000 --name jenkins --restart always -v /home/jenkins/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins
二、配置全局参数
-
jdk安装
image.png -
配置maven环境
image.png -
Publish Over SSH 配置
3.1 安装 Publish Over SSH 插件
image.png
3.2 配置 Publish Over SSH
在Configure System菜单里 往下拉
image.png
image.png
3.3 配置 Build Authorization Token Root
image.png -
配置 NodeJS
4.1 通过jenkins自动安装
image.png
image.png
4.2 通过官网下载安装包
三、构建后端自动打包部署项目
-
创建maven构建项目
image.png - 配置当前项目参数
2.1 配置git仓库地址
image.png
2.2 配置目标服务器,通过 Publish Over SSH 将jar包发送到目标服务器
image.png
image.png
nohup启动后 bash会进行阻塞卡住,jenkins认为认为一直没完成
shell的日志输出
nohup java -jar /home/test/test-0.0.1-SNAPSHOT.jar >/home/test/nohup.log 2>&1 &
数据流重定向
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方
标准输入(stdin):代码为0,使用<或<<;
标准输出(stdout):代码为1,使用>或>>;
标准错误输出(stderr):代码为2,使用2>或2>>
> 覆盖写
>> 追加写
2.3 配置jar启动前,清理目标服务器占用端口及历史jar包文件
注意:需要在目标服务器上编写清理脚本
#!/bin/bash
# 判断如果没有传递参数 则不再往下执行
# 将要操作的jar包 通过命令行传递进来
appWorkSpace=$1
#获取传入的参数
if [ -z $appWorkSpace ];
then
echo "当前传递参数【appWorkSapce:$appWorkSpace】为空"
exit 1
fi
# 获取当前jar包执行所占用的端口号
appPort=$2
if [ -z $appPort ];
then
echo "当前传递参数【appPort:$appPort】 为空"
exit 1
fi
# 删除原始文件
# rm -rf /home/test/test-0.0.1-SNAPSHOT.jar
# 删除历史文件
# rm -rf /home/test/test-0.0.1-SNAPSHOT.jar-*
# 将原始文件进行备份删除
# 获取当前时间戳
time=$(date "+%Y%m%d%H%M%S")
echo $time
# 备份历史文件
mv $appWorkSpace $appWorkSpace'-'${time}
# 获取当前正在运行的端口服务
pid=`netstat -tunpl | grep $appPort | awk '{printf $7}' | awk '{split($1, arr, "/"); print arr[1]}'`
echo "pid:$pid"
#如果pid为空,提示一下,否则,执行kill命令
if [ -z $pid ];
#使用-z 做空值判断
then
echo "当前pid为空"
echo "$appWorkSpace not started"
else
kill -9 $pid
echo "当前不为空"
echo "$appWorkSpace stoping...."
fi
echo "12312312312312"
# 再次判断一下当前的pid是否还存在
oldPid=`netstat -tunpl | grep $appPort | grep $pid | grep java`
echo "oldPid:$oldPid"
if [ -z $oldPid ];
then
echo "$appWorkSapce pid:$pid is stop..................";
else
echo "$appWorkSapce stop failed"
fi
echo $pid
2.4 配置jenkins触发器,通过gitlab调用jenkins构建项目,使用Build Authorization Token Root插件进行调用(去掉不同浏览器需要登录验证)
image.png
image.png
http://${IP}:${PORT}/buildByToken/build?job=${NAME}&token=${SECRET}
2.5 配置gitlab 项目中 webhooks调用钩子调用jenkins触发项目构建
image.png
四、构建vue项目自动打包部署
-
创建构建项目
image.png -
全局配置node环境
image.png -
配置git仓库地址
image.png -
配置构建环境
image.png -
通过命令引入依赖并打包,并打成压缩包
image.png -
通过命令发送到目标服务器,并执行脚本解压部署到指定文件夹中
image.png -
编写脚本,自动清理目标服务器文件
image.png
#!/bin/bash
# 获取传入的参数 指定文件夹名
appWorkSpace=$1
if [ -z $appWorkSpace ];
then
echo "当前传递参数【appWorkSpace:$appWorkSpace 】为空"
exit 1
fi
# 删除/备份历史前端打包文件
# 删除
# rm -rf $appWorkSpace'/html/dist'
# 备份
time=$(date "+%Y%m%d%H%M%S")
echo $time
mv $appWorkSpace'/html/dist' $appWorkSpace'/html/dist-'$time
# 将当前文件拷贝到指定容器文件夹中
cp -r $appWorkSpace'/dist' $appWorkSpace'/html'
# 删除当前压缩文件及文件夹
rm -rf $appWorkSpace'/dist'
rm -rf $appWorkSpace'/dist.tar.gz'
-
执行清理当前jenkins工作空间脚本,清除dist和dist.tar.gz压缩包
image.png
网友评论