#!/bin/bash
#2023-3-27 不再判断构建的时间直接合并分支
#!/bin/bash
#时间戳
date_stamp=`date "+%Y-%m-%d"`
limit=${1:-2}
#通过jenkins cli 获取生产环境的jobs list
JOB_list=$(/usr/lib/jdk/jdk1.8.0_311/bin/java -jar jenkins-cli.jar -s http://myjenkins.com/ list-jobs |grep Official)
#echo "$JOB_list"
echo "---start $date_stamp auto merge---"
Current_timestamp=$(date +%s) #当前系统时间戳
for i in $JOB_list ;
do
echo "$i"
Builddate=$(curl -s http://myjenkins.com/job/$i/lastSuccessfulBuild/buildTimestamp) #构建时间
Timestamp=$(date -d "$Builddate" +%s)
Repo=$(curl -s http://myjenkins.com/job/$i/lastSuccessfulBuild/api/json | jq '.'|grep 'https://gitee.com' ||sed 's/\"//g') #获取仓库地址
#仓库地址转换成git@,去掉https
Git_Repo=`echo ${Repo/https:\/\/gitee.com\//git@gitee.com:}`
echo "$Git_Repo"
Branch=$(curl -s http://myjenkins.com/job/$i/lastSuccessfulBuild/api/json | jq ".actions[0].parameters[0].value"|sed 's/\"//g'|awk -F/ '{print $2$3}'|sed 's/heads/origin\//g') #读取分支
let Time_1=($Current_timestamp - $Timestamp) #当前时间戳 - 构建时间戳
let Day=($Time_1/86400 + 1) #按天计算
#let Day=($Time_1/60) # 1分钟
#echo "$i 任务的时间戳 : $Timestamp \t$i任务的repo地址: $(Successrepo) \t$i 任务的构建分支: $(Successbranch)\t"
echo "$Builddate" 与当前相差$Day 天 "$Repo" "$Branch"
# if [ -n $1 ]
if [ $Day -eq $limit ]
then
echo "$i 需要合并分支"
git clone $Git_Repo /tmp/$i && cd /tmp/$i && git checkout master && echo "已切换至master分支" && \
git merge $Branch &>/tmp/merge-error.log
if [ $? -gt 0 ];
then
Erro=`cat /tmp/merge-error.log|sed 's/\"//g'`
send_weixin_v2 "【$date_stamp】\n【合并失败】\n【gitee项目"$i"】\n【最后一次构建时间:$Builddate】\n【$Branch 分支合并失败】\n【backup-server/10.10.10.21】\n 错误信息: $Erro"
else
cd /tmp/$i
git push origin master && \
send_weixin_v2 "【$date_stamp】\n【合并成功】\n【gitee项目"$i"】\n【最后一次构建时间:$Builddate】\n【$Branch分支合并成功】\n【backup-server/10.10.10.21】\n gitee code 合并完成"
fi
else
echo "【$date_stamp】\n【$i项目】\n【最后一次构建时间:$Builddate】\n【"$Branch"】\n 分支构建没有超过2天,不需要合并。" >> /tmp/merge.log
fi
cd /tmp/ && rm -rf /tmp/$i && echo "删除tmp目录下的$i" && echo ""
done
echo "---end $date_stamp auto merge---"