优秀的编程知识分享平台

网站首页 > 技术文章 正文

自动合并git分支的shell 脚本(git自动合并冲突)

nanyue 2024-09-05 18:11:16 技术文章 6 ℃

#!/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---"

最近发表
标签列表