Jenkins Send build artifacts over SSH 脚本范本

湛功
2023-12-01

说明:前端Angular项目;部署在tomcat的/webapps/root目录下;在jenkins的执行 shell模块完成了编译和压缩包:myApp.tar.gz;构建使用了选项参数,用来传输回滚的版本序号(前提是开发心里知道哪个版本的内容);

脚本主要内容:备份num数量的版本;获取jenkins传入参数指定回滚的序号(从近到远对备份进行排序),进行回滚;

#项目部署路径
deployPath="/data/tomcat/webapps/root"
#项目名称
dicP="TestProject"
#backup history项目历史备份目录
dicBH="TestProjectBACK"
#编译包压缩后的名称
packageFile="myApp.tar.gz"
# num 历史备份文件数量,目前设置为10个。需要和Jenkins端传入最大传入参数值保持一致。
num=5

cd ${deployPath}
if [ ! -d ${dicBH} ]
then
	echo "备份文件夹${dicBH}不存在,新建中..."
	mkdir ${dicBH}
	echo "备份文件夹${dicBH}新建成功。" 
fi


cd ${deployPath}
if [ ${DeployOrRollback} = 0 ]
then 

	if [ -d ${dicP} ]
	then
		echo " ${dicP}项目存在,需要进行备份"
		#历史备份  
		tar -czf ${dicBH}/${dicP}.`date +%Y%m%d%H%M%S`.tar.gz ${dicP}
		#备份完进行删除
		rm -rf ${dicP}
		cd ${deployPath}/${dicBH}
		packageFilenumb=$(ls -ltr| grep -v 'total' | grep "^-" | grep .tar.gz | wc -l)
		echo ${packageFilenumb}
		#packageFilenumb=$(ls -tr|grep .tar.gz|wc -l)
		if [ ${packageFilenumb} -gt ${num} ]
		then
			echo "备份文件只保留${num}个。多余的进行删除。"
			let numbDel=${packageFilenumb}-${num}
			ls -ltr| grep -v 'total' | grep "^-" | grep .tar.gz | awk '{print $9}' | head -n  ${numbDel} | xargs rm -rf
		fi
	else 
		echo "使用中的项目${dicP}不存在,不进行备份操作。"
	fi
	
	cd ${deployPath}
	if [ -f ${packageFile} ]
	then
		echo "开始部署"
		echo ${dicP}
		tar -xzf ${packageFile}
		# mv myApp ${dicP}
		mv ${packageFile%.tar.gz} ${dicP}
		echo "部署成功"
	else
		echo "=====没有获取到部署包,请检查======="
	fi
else
	cd ${deployPath}/${dicBH}
	packageFilenumb=$(ls -ltr| grep -v 'total' | grep "^-" | grep .tar.gz | wc -l)
	#packageFilenumb=$(ls -tr|grep .tar.gz|wc -l)
	echo ${packageFilenumb}
	if [ ${DeployOrRollback} -le ${packageFilenumb} ]
	then
		#获取备份文件中回滚指定的那一版本的文件名称  tr '\n' ' ' 把换行符替换为空格,实现多行变成一行 
		#backPackageName=$(ls -t|tr '\n' ' '|awk -v c="${DeployOrRollback}" '{print $c}')
		backPackageName=$(ls -lt|grep -v 'total'|grep "^-"|awk '{print $9}'|tr '\n' ' '|awk -v c="${DeployOrRollback}" '{print $c}')
		#tar -xzf ${backPackageName} -C ${deployPath}
		#rm -rf ${backPackageName}
		mv ${backPackageName} ${deployPath}
		
		cd ${deployPath}
		if [ -d ${dicP} ]
		then
			echo " ${dicP}项目存在,需要进行备份"
			#历史备份  
			tar -czf ${dicBH}/${dicP}.`date +%Y%m%d%H%M%S`.tar.gz ${dicP}
			#备份完进行删除
			rm -rf ${dicP}
			cd ${deployPath}/${dicBH}
			packageFilenumb=$(ls -ltr| grep -v 'total' | grep "^-" | grep .tar.gz | wc -l)
			echo ${packageFilenumb}
			#packageFilenumb=$(ls -tr|grep .tar.gz|wc -l)
			if [ ${packageFilenumb} -gt ${num} ]
			then
				echo "备份文件只保留${num}个。多余的进行删除。"
				let numbDel=${packageFilenumb}-${num}
				ls -ltr| grep -v 'total' | grep "^-" | grep .tar.gz | awk '{print $9}' | head -n  ${numbDel} | xargs rm -rf
			fi
		else 
			echo "使用中的项目${dicP}不存在,不进行备份操作。"
		fi
		
		cd ${deployPath}
		tar -xzf ${backPackageName}
		echo "指定版本${backPackageName}回滚成功"
	else
		echo "指定的回滚版本不存在"
	fi
fi

cd ${deployPath}
echo "------clean Remote *.tar.gz and ${packageFile%.tar.gz}--------"
if [ -d "${packageFile%.tar.gz}" ]
then 
  rm -rf ${packageFile%.tar.gz}
fi
if [ -f "${packageFile}" ]
then 
  rm -rf ${packageFile}
fi
if [ -f "${backPackageName}" ]
then 
  rm -rf ${backPackageName}
fi
echo "------clean Remote Finished--------"

 类似资料: