对GitLab较新,通过使用bash脚本文件进行简单的ping测试,我尝试获取测试的值,成功或失败以及ping的持续时间。
pingtest.sh文件
#!/bin/bash
count=$1
target=$2
testname=$3
ping -c $count $target >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo $testname,Success,$(ping -c $count $target | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|')
else
echo $testname,Failure,$(ping -c $count $target | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|')
fi
.gitlab-ci.yml文件
image: centos
stages:
- zero
job run_test_zero:
stage: zero
artifacts:
when: always
paths:
- "report/*"
script:
- echo "TEST NAME|RESULT|DURATION" >> ./report/report.txt
- chmod +x ./scripts/pingtest.sh
- ./scripts/pingtest.sh 3 google.com pinggoolepass >> ./report/report.txt
- ./scripts/pingtest.sh 3 google1.com pinggoolefail >> ./report/report.txt
report.txt文件
TEST NAME|RESULT|DURATION
pinggoolepass,Success,6.066
pinggoolefail,Failure,
我无法获取失败ping测试的持续时间。
请任何人建议并指导我
答案 0 :(得分:0)
ping
首先,您不必执行两次ping
。一次性提取退出状态和最长rrt时间的方法有多种。这是脚本的替代版本:
#!/bin/bash
count="$1"
target="$2"
testname="$3"
if time=$(set -o pipefail;
ping -c "$count" "$target" 2>&- | awk -F/ 'END {print $6}')
then
result=Success
else
result=Failure
fi
echo "$testname,$result,$time"
或者您可以将if ... fi
部分替换为
output="$(ping -c "$count" "$target" 2>&-)"
[ $? = 0 ] && result=Success || result=Failure
time="$(awk -F/ 'END {print $6}' <<< "$output")"
这两个脚本都等同于您的脚本,并且不会在ping
失败的情况下显示时间。
要»获取持续时间«,您首先必须指定»持续时间«是什么。
如果您希望退出ping
所花费的时间,请使用time
命令,或者通过两次调用date
或通过使用$EPOCHESECONDS
来自己测量时间bash
≥5.0。但是,该值没有意义,我不明白您为什么要打印它。
如果您要谈论超时(对于google1.com而言并非如此),您最好自己指定一个超时并使用该值。