接上一篇文件,这里开始构建一个流水线部署应用。

全局配置

工作目录、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;