接上一篇文件,这里开始构建一个流水线部署应用。
全局配置
工作目录、SSH机器、认证信息、监控、关联插件(如jira,bitbucket等),邮件通知、执行任务相关配置等
1、创建任务
创建任务名称,简介
2、通用配置
构建策略配置,参数化,重试次数,上下游依赖操作等
3、源码配置
本地库、GIT库等,配置仓库url,分支,认证信息,还有额外配置,如构建之前操作等
4、构建触发器
触发方式,令牌/定时/轮询/其他工程之后/或者钩子构建
5、构建环境
构建工作开始清理工作区,日志,构建之前发送ssh命令/脚本到服务器等
6、构建之前步骤
执行构建前步骤
7、构建配置
maven项目设置pom路径,构建命令,如clean package -DskipTests,高级配置自定义工作空间,setting等配置。
8、构建之后
构建连接到ssh服务器,也可以结合docker
配置Transfers,设置要拷贝到服务器的文件和脚本,远程目录,然后执行相关命令
如:
# 移动工作区的文件到部署目录
mv -f /home/uploadfile/startup.sh /home/startup.sh
# 特殊字符处理
sed -i 's@\r@@g' /home/startup.sh
# 执行权限
chmod +755 /home/startup.sh
# 执行部署脚本
bash /home/startup.sh
部署脚本参考,这里部署多个服务,修改appNameArray里面参数即可,逗号隔开jar包名称。实现了自动备份jar包,自动部署,部署失败自动回滚。
#!/bin/bash
#create folder
if [ ! -d "/home/uploadfile" ]; then
echo "create folder uploadfile"
mkdir /home/uploadfile
else
echo "folder uploadfile exist"
fi
if [ ! -d "/home/jar" ]; then
echo "create folder jar"
mkdir /home/jar
else
echo "folder jar exist"
fi
if [ ! -d "/home/bak" ]; then
echo "create folder bak"
mkdir /home/bak
else
echo "folder bak exist"
fi
#app jar package
appNameArray=(huq-api)
#clear bak jar
rm -rf bak/*
for((i=0;i<${#appNameArray[@]};i++))
do
echo 'deploy start '${appNameArray[i]}
cd /home/jar/
if [ -f "/home/uploadfile/"${appNameArray[i]}"/target/"${appNameArray[i]}"-0.0.1-SNAPSHOT.jar" ]; then
#kill pid
tpid=ps -ef |grep java |grep ${appNameArray[i]}-0.0.1-SNAPSHOT.jar |grep -v kill|awk '{print $2}'
if [ "${tpid}" ]; then
echo 'Stop Process '$tpid;
kill -9 $tpid
rm -rf nohup_${appNameArray[i]}.out
fi
echo 'start Process ' ${appNameArray[i]}
#bak
mv ${appNameArray[i]}-0.0.1-SNAPSHOT.jar /home/bak/${appNameArray[i]}-0.0.1-SNAPSHOT.jar
#get new jar
mv /home/uploadfile/${appNameArray[i]}/target/${appNameArray[i]}-0.0.1-SNAPSHOT.jar ${appNameArray[i]}-0.0.1-SNAPSHOT.jar
#start jar
nohup java -jar ${appNameArray[i]}-0.0.1-SNAPSHOT.jar > nohup_${appNameArray[i]}.out &
else
echo "start Process package no exist "${appNameArray[i]}
fi
echo 'deploy end...';
done;