homework-jianmu/tests/ci/restore.sh

160 lines
4.3 KiB
Bash

#!/bin/bash
set -x
JENKINS_LOG=jenkins.log
# pr_num=14228
# n=1
function usage() {
echo "$0"
echo -e "\t -p PR number"
echo -e "\t -n build number"
echo -e "\t -c container name"
echo -e "\t -h help"
}
while getopts "p:n:c:h" opt; do
case $opt in
p)
pr_num=$OPTARG
;;
n)
n=$OPTARG
;;
c)
container_name=$OPTARG
;;
h)
usage
exit 0
;;
\?)
echo "Invalid option: -$OPTARG"
usage
exit 1
;;
esac
done
if [ -z "$container_name" ]; then
echo "container name not specified"
usage
exit 1
fi
if [ -z "$pr_num" ]; then
echo "PR number not specified"
usage
exit 1
fi
if [ -z "$n" ]; then
echo "build number not specified"
usage
exit 1
fi
pr_num=`echo "$pr_num"|sed "s/PR-//"`
container_count=`docker ps -a -f name=$container_name|wc -l`
if [ $container_count -gt 1 ]; then
docker ps -a -f name=$container_name
echo "container $container_name exists"
exit 1
fi
cd $(dirname $0)
info=`grep -n "^[0-9]\{8\}-[0-9]\{6\}" jenkins.log | grep -A 1 "PR-${pr_num}:${n}:"`
# 22131:20220625-113105 NewTest/PR-14228:PR-14228:1:3.0
# 22270:20220625-121154 NewTest/PR-14221:PR-14221:2:3.0
ci_hosts="\
192.168.0.212 \
192.168.0.215 \
192.168.0.217 \
192.168.0.219 \
"
if [ -z "$info" ]; then
echo "PR-${pr_num}:${n} not found"
for host in $ci_hosts; do
ssh root@$host "sh -c \"grep -n \\\"^[0-9]\\\\\{8\\\\\}-[0-9]\\\\\{6\\\\\}\\\" /var/lib/jenkins/workspace/jenkins.log | grep \\\"PR-${pr_num}:${n}:\\\"\""
if [ $? -eq 0 ]; then
echo "this PR is possibly on host $host"
break
fi
done
exit 1
fi
line_num=`echo "$info"|wc -l`
curr=`echo "$info"|head -n1`
if [ "$line_num" == "2" ]; then
next=`echo "$info"|tail -n1`
fi
# check if it is TDinternal CI
internal=0
commit_prefix=community
echo "$curr"|grep -q TDinternalCI
if [ $? -eq 0 ]; then
internal=1
commit_prefix=tdinternal
fi
curr_line=`echo "$curr"|cut -d: -f1`
next_line='$'
if [ ! -z "$next" ]; then
next_line=`echo "$next"|cut -d: -f1`
next_line=$(( next_line - 1 ))
fi
# echo "$curr_line, $next_line"
details=`sed -n "${curr_line},${next_line}p" $JENKINS_LOG`
merge_line=`echo "$details"|grep -A 10 "$commit_prefix log merged: "|grep "Merge .* into"|head -n1`
if [ -z "$merge_line" ]; then
echo "merge commit not found"
exit 1
fi
echo "$merge_line"
branch=`echo "$merge_line"|awk '{print $2}'`
commit_id=`echo "$merge_line"|awk '{print $4}'`
# echo "$details"
community_id=`echo "$details"|grep "community log: commit"|awk '{print $NF}'`
internal_id=`echo "$details"|grep "tdinternal log: commit"|awk '{print $NF}'`
python_connector_id=`echo "$details"|grep "python connector log: commit"|awk '{print $NF}'`
# change_branch=`echo "$details"|grep "CHANGE_BRANCH"|sed "s/CHANGE_BRANCH://"`
# if [ -z "${branch}" ]; then
# branch="$change_branch"
# fi
PWD=`pwd`
log_dir=`ls log|grep "PR-${pr_num}_${n}_"`
if [ -z "$log_dir" ]; then
echo "no log dir found"
else
mount_dir="-v ${PWD}/log/$log_dir:/home/log"
build_dir=`ls log/$log_dir | grep "build_"`
if [ ! -z "$build_dir" ]; then
mount_dir="$mount_dir -v ${PWD}/log/$log_dir/$build_dir:/home/TDinternal/debug/build"
fi
fi
docker run -d --privileged -it --name $container_name \
$mount_dir \
taos_test:v1.0 bash
if [ $internal -eq 0 ]; then
docker exec $container_name /home/setup.sh -c $commit_id -m $branch -n
echo "TDinternal checkout: $internal_id"
docker exec $container_name sh -c "cd /home/TDinternal; git checkout $internal_id"
else
docker exec $container_name /home/setup.sh -e -c $commit_id -m $branch -n
echo "community checkout: $community_id"
docker exec $container_name sh -c "cd /home/TDinternal/community; git checkout $community_id"
fi
echo
echo "* run the following command to enter the container:"
echo " docker exec -it $container_name bash"
if [ -z "$log_dir" ]; then
echo "* no log dir found"
else
echo "* log and coredump files are located in /home/log"
fi
if [ -z "$build_dir" ]; then
echo "* no build dir found"
else
echo "* build files are located in /home/TDinternal/debug/build"
fi
echo "* source files are located in /home/TDinternal"