天天看點

自動合并git分支的shell 腳本

作者:北京老頭做運維

#!/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\//[email protected]:}`

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---"