jenkins自动化构建,并手动把spring cloud构建的模块发布到对应的服务器上

  1. 要求:当gitlab提交到release/*分支上时,触发jenkins自动构建,再手动把构建的包发布到对应的服务器上。
  2. 配置jenkins自动构建job,参考我上一篇博客:jenkins通过正则表达式过滤分支,gitlab推送到特定分支时自动构建
  3. 新建一个自由风格的job Rollback,用于发布自动构建的包。
  4. 选择参数化构建,按如图所示设置参数。
    在这里插入图片描述
  5. 构建环境勾选Color ANSI Console Output,用于输出shell脚本的字体颜色
    在这里插入图片描述
  6. 构建设置build,执行shell,填写用来发布的脚本。
    在这里插入图片描述
  7. 编写发布脚本
#!/bin/bash
#java jenkins发布脚本
#author menard 2019-06-12

#编写发送文件函数,$job是jenkins里选择的job,$version是jenkins输入的版本号

#定义变量
web1_mod='client-app,registration,authenticate-server,client-web,common-server'
web2_mod='client-app,registration,authenticate-server,client-web,common-server'
api_mod='registration,common-server,client-api'
fs_mod='server-upload,client-web,common-server,registration'
cms_mod='cms'
schedule_mod='schedule,asynclog'

web_user=www
fs_user=vod

web1_ip=172.16.218.1
web2_ip=172.16.58.2
api_ip=10.168.154.3
fs_ip=10.122.84.4
cms_ip=172.16.218.5
schedule_ip=172.16.218.6

dest_default=目标主机上的项目所在目录
cmd_default=目标主机上的项目更新脚本
cmd_default2=docker部署的项目更新脚本
#cmd_default2用于docker的模块是docker的发布
#dest_default=/tmp
#cmd_default=ls
#cmd_default2=ls


echo "job=$job"
echo "版本号=$version"
echo host=$host
#函数使用方法build (要发布的模块名) 用户名 主机ip 文件路径 执行脚本 ssh端口
function build ()
{
echo "模块=$1"
echo "用户=$2"
echo "ip=$3"
echo "目录=$4"
echo "命令=$5"
echo "端口=$6"
	#去掉$1传进来的,
	mod=(`echo $1|sed 's/,/ /g'`)
	#echo mod=${mod[*]}

#同步前,先把目标目录文件删除
ssh -p $6  $2@$3  << eeooff
	echo "正在删除$3的$4目录下的*.tar.gz文件"
	rm -rf $4/*.tar.gz 
        exit
eeooff

	#循环传送需要的构建成的gz包到目标服务器
	for i in ${mod[@]}
	do
		#echo i=$i
		#$job是jenkins的job参数,$version是jenkins的版本号,用来选择要回滚的job和版本号
		dir=`find /var/jenkins_home/jobs/$job/builds/$version/ -name "*$i*" -type d`
		#echo dir=$dir
		file=`find $dir -name *.tar.gz`
		#echo file=$file
		#$2是函数调用时输入的目标用户,$3为目标ip,$4为目标路径
		f=`echo $file |awk -F / '{print $NF;}'`
		#echo f=$f
		rsync -zP -e "ssh -p $6" --timeout=1800 $file $2@$3:$4
		#通过$?的值判断有没传送成功,如果失败返回失败值并结束脚本
		if [ $? -ne 0 ];then
			echo -e "\01122[31m$file发送到$3失败 \01122[0m"
			exit 1
		fi
		echo "$f已发送到$3"
	done
#连上服务器执行发布脚本,$5为发布脚本
echo -e "\01122[32m$3全部文件发送完成,开始执行发布脚本 \01122[0m"

ssh  -p $6 $2@$3  << eeooff
	$5
eeooff
        if [ $? -eq 0 ];then
		echo -e "\01122[32m$3发布完成 \01122[0m"
	else 
		echo -e "\01122[31m$3执行发布脚本失败 \01122[0m"
		exit 1
        fi
}

case $host in
    web1)
	build $web1_mod $web_user $web1_ip $dest_default $cmd_default 22
        ;;
    web2)
	build $web2_mod $web_user $web2_ip $dest_default $cmd_default 22
	;;
    'web1 & web2')
    #修改Hudson设置的环境变量BUILD_ID的值,从而让Jenkins认为此进程不是由Job的构建过程衍生的,防止Jenkins kill掉进程
	BUILD_ID=dontKillMe
	build $web1_mod $web_user $web1_ip $dest_default $cmd_default 22
	build $web2_mod $web_user $web2_ip $dest_default $cmd_default 22
        ;;
    api)
	build $api_mod $web_user $api_ip $dest_default $cmd_default2 22
        ;;
    fs)
	build $fs_mod $fs_user $fs_ip $dest_default $cmd_default 22
	;;
    cms)
	build $cms_mod $web_user $cms_ip $dest_default $cmd_default2 22
	;;
    schedule)
	build $schedule_mod $web_user $schedule_ip $dest_default $cmd_default 22
	;;
    all)
	BUILD_ID=dontKillMe
	build $web1_mod $web_user $web1_ip $dest_default $cmd_default 22
	build $web2_mod $web_user $web2_ip $dest_default $cmd_default 22
	build $api_mod $web_user $api_ip $dest_default $cmd_default2 22
	build $fs_mod $fs_user $fs_ip $dest_default $cmd_default 22
	build $cms_mod $web_user $cms_ip $dest_default $cmd_default2 22
	build $schedule_mod $web_user $schedule_ip $dest_default $cmd_default 22
	;;
    *)
    exit
        ;;
esac

  1. 构建
    在这里插入图片描述
  2. 查看构建结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Menardღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值