160 lines
4.3 KiB
Bash
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"
|
|
|