Skip to content

Commit 218944a

Browse files
committed
Push failed test k8s logs to S3 bucket
1 parent 1127c61 commit 218944a

File tree

2 files changed

+68
-3
lines changed

2 files changed

+68
-3
lines changed

Jenkinsfile

+16
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,21 @@ void pushLogFile(String FILE_NAME) {
103103
}
104104
}
105105

106+
void pushK8SLogs(String TEST_NAME) {
107+
def LOG_FILE_PATH="e2e-tests/logs/"
108+
def FILE_NAMES="logs_${TEST_NAME}_*"
109+
echo "Push k8s logs to S3!"
110+
111+
withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', accessKeyVariable: 'AWS_ACCESS_KEY_ID', credentialsId: 'AMI/OVF', secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) {
112+
sh """
113+
S3_PATH=s3://percona-jenkins-artifactory/\$JOB_NAME/\$(git rev-parse --short HEAD)/logs/
114+
aws s3 ls \$S3_PATH || :
115+
aws s3 rm \$S3_PATH --recursive --exclude "*" --include "${FILE_NAMES}" || :
116+
aws s3 cp --quiet ${LOG_FILE_PATH} \$S3_PATH --recursive --exclude "*" --include "$FILE_NAMES" || :
117+
"""
118+
}
119+
}
120+
106121
void popArtifactFile(String FILE_NAME) {
107122
echo "Try to get $FILE_NAME file from S3!"
108123

@@ -218,6 +233,7 @@ void runTest(Integer TEST_ID) {
218233
return true
219234
}
220235
catch (exc) {
236+
pushK8SLogs("$testName")
221237
if (retryCount >= 1 || currentBuild.nextBuild != null) {
222238
currentBuild.result = 'FAILURE'
223239
return true

e2e-tests/functions

+52-3
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ wait_pod() {
150150
echo -n .
151151
let retry+=1
152152
if [ $retry -ge 360 ]; then
153+
collect_k8s_logs
153154
kubectl_bin describe pod/$pod
154155
kubectl_bin logs $pod
155156
kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) \
@@ -158,6 +159,7 @@ wait_pod() {
158159
| grep -v 'Getting tasks for pod' \
159160
| grep -v 'Getting pods from source' \
160161
| tail -100
162+
161163
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
162164
exit 1
163165
fi
@@ -177,12 +179,14 @@ wait_cron() {
177179
echo -n .
178180
let retry+=1
179181
if [ $retry -ge 360 ]; then
182+
collect_k8s_logs
180183
kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) \
181184
| grep -v 'level=info' \
182185
| grep -v 'level=debug' \
183186
| grep -v 'Getting tasks for pod' \
184187
| grep -v 'Getting pods from source' \
185188
| tail -100
189+
186190
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
187191
exit 1
188192
fi
@@ -201,8 +205,10 @@ wait_backup_agent() {
201205
echo -n .
202206
let retry+=1
203207
if [ $retry -ge 360 ]; then
208+
collect_k8s_logs
204209
kubectl_bin logs $agent_pod -c backup-agent \
205210
| tail -100
211+
206212
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
207213
exit 1
208214
fi
@@ -224,12 +230,14 @@ wait_backup() {
224230
let retry+=1
225231
current_status=$(kubectl_bin get psmdb-backup $backup_name -o jsonpath='{.status.state}')
226232
if [[ $retry -ge 360 || ${current_status} == 'error' ]]; then
233+
collect_k8s_logs
227234
kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) \
228235
| grep -v 'level=info' \
229236
| grep -v 'level=debug' \
230237
| grep -v 'Getting tasks for pod' \
231238
| grep -v 'Getting pods from source' \
232239
| tail -100
240+
233241
echo "Backup object psmdb-backup/${backup_name} is in ${current_state} state."
234242
echo something went wrong with operator or kubernetes cluster
235243
exit 1
@@ -283,12 +291,14 @@ wait_deployment() {
283291
echo -n .
284292
let retry+=1
285293
if [ $retry -ge 360 ]; then
294+
collect_k8s_logs
286295
kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) \
287296
| grep -v 'level=info' \
288297
| grep -v 'level=debug' \
289298
| grep -v 'Getting tasks for pod' \
290299
| grep -v 'Getting pods from source' \
291300
| tail -100
301+
292302
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
293303
exit 1
294304
fi
@@ -328,6 +338,7 @@ wait_restore() {
328338
let retry+=1
329339
current_state=$(kubectl_bin get psmdb-restore restore-$backup_name -o jsonpath='{.status.state}')
330340
if [[ $retry -ge 720 || ${current_state} == 'error' ]]; then
341+
collect_k8s_logs
331342
kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) \
332343
| grep -v 'level=info' \
333344
| grep -v 'level=debug' \
@@ -528,6 +539,7 @@ retry() {
528539

529540
until "$@"; do
530541
if [[ $n -ge $max ]]; then
542+
collect_k8s_logs
531543
echo "The command '$@' has failed after $n attempts."
532544
exit 1
533545
fi
@@ -567,6 +579,7 @@ wait_for_running() {
567579
timeout=$((timeout + 1))
568580
echo -n '.'
569581
if [[ ${timeout} -gt 1500 ]]; then
582+
collect_k8s_logs
570583
echo
571584
echo "Waiting timeout has been reached. Exiting..."
572585
exit 1
@@ -588,12 +601,14 @@ wait_for_delete() {
588601
echo -n .
589602
let retry+=1
590603
if [ $retry -ge 60 ]; then
604+
collect_k8s_logs
591605
kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) \
592606
| grep -v 'level=info' \
593607
| grep -v 'level=debug' \
594608
| grep -v 'Getting tasks for pod' \
595609
| grep -v 'Getting pods from source' \
596610
| tail -100
611+
597612
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
598613
exit 1
599614
fi
@@ -609,6 +624,8 @@ compare_generation() {
609624

610625
current_generation="$(kubectl_bin get ${resource_type} "${resource_name}" -o jsonpath='{.metadata.generation}')"
611626
if [[ ${generation} != "${current_generation}" ]]; then
627+
collect_k8s_logs
628+
612629
echo "Generation for ${resource_type}/${resource_name} is: ${current_generation}, but should be: ${generation}"
613630
exit 1
614631
fi
@@ -667,9 +684,9 @@ compare_kubectl() {
667684
del(.spec.ipFamilyPolicy) |
668685
(.. | select(. == "extensions/v1beta1")) = "apps/v1" |
669686
(.. | select(. == "batch/v1beta1")) = "batch/v1" ' - >${new_result}
670-
687+
671688
yq -i eval 'del(.spec.persistentVolumeClaimRetentionPolicy)' ${new_result}
672-
689+
673690
if version_gt "1.22"; then
674691
yq -i eval 'del(.spec.internalTrafficPolicy)' ${new_result}
675692
yq -i eval 'del(.spec.allocateLoadBalancerNodePorts)' ${new_result}
@@ -961,6 +978,7 @@ get_service_endpoint() {
961978
return
962979
fi
963980

981+
collect_k8s_logs
964982
exit 1
965983
}
966984

@@ -1135,6 +1153,7 @@ wait_cluster_consistency() {
11351153
until [[ "$(kubectl_bin get psmdb "${cluster_name}" -o jsonpath='{.status.state}')" == "ready" ]]; do
11361154
let retry+=1
11371155
if [ $retry -ge 32 ]; then
1156+
collect_k8s_logs
11381157
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
11391158
exit 1
11401159
fi
@@ -1161,6 +1180,7 @@ check_backup_deletion() {
11611180
retry=0
11621181
until [[ $(curl -sw '%{http_code}' -o /dev/null $path) -eq 403 ]] || [[ $(curl -sw '%{http_code}' -o /dev/null $path) -eq 404 ]]; do
11631182
if [ $retry -ge 10 ]; then
1183+
collect_k8s_logs
11641184
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
11651185
echo "Backup was not removed from bucket -- $storage_name"
11661186
exit 1
@@ -1222,6 +1242,7 @@ function get_mongod_ver_from_image() {
12221242
version_info=$(run_simple_cli_inside_image ${image} 'mongod --version' | $sed -r 's/^.*db version v(([0-9]+\.){2}[0-9]+-[0-9]+).*$/\1/g')
12231243

12241244
if [[ ! ${version_info} =~ ^([0-9]+\.){2}[0-9]+-[0-9]+$ ]]; then
1245+
collect_k8s_logs
12251246
printf "No mongod version obtained from %s. Exiting" ${image}
12261247
exit 1
12271248
fi
@@ -1234,6 +1255,7 @@ function get_pbm_version() {
12341255
local version_info=$(run_simple_cli_inside_image ${image} 'pbm-agent version' | $sed -r 's/^Version:\ (([0-9]+\.){2}[0-9]+)\ .*/\1/g')
12351256

12361257
if [[ ! ${version_info} =~ ^([0-9]+\.){2}[0-9]+$ ]]; then
1258+
collect_k8s_logs
12371259
printf "No pbm version obtained from %s. Exiting" ${image}
12381260
exit 1
12391261
fi
@@ -1274,6 +1296,33 @@ function generate_vs_json() {
12741296
echo ${version_service_source} | jq '.' >${target_path}
12751297
}
12761298

1299+
collect_k8s_logs() {
1300+
if [[ ${ENABLE_LOGGING} == "true" ]]; then
1301+
rm -f ${logs_dir}/logs_${test_name}_* || :
1302+
1303+
local check_namespaces="$namespace${OPERATOR_NS:+ $OPERATOR_NS}"
1304+
1305+
for ns in $check_namespaces; do
1306+
local pods=$(kubectl_bin get pods -o name | awk -F "/" '{print $2}')
1307+
for p in $pods; do
1308+
local containers=$(kubectl_bin -n "$ns" get pod $p -o jsonpath='{.spec.containers[*].name}')
1309+
for c in $containers; do
1310+
kubectl_bin -n "$ns" logs $p -c $c >${logs_dir}/logs_${test_name}_$p_$c.txt
1311+
echo logs saved in: ${logs_dir}/logs_${test_name}_$p_$c.txt
1312+
done
1313+
done
1314+
done
1315+
for object in "psmdb psmdb-backup psmdb-restore pods deployments services events sts"; do
1316+
echo "##### START: $object #####" >>${logs_dir}/logs_${test_name}_simple.txt
1317+
kubectl_bin get $object --all-namespaces >>${logs_dir}/logs_${test_name}_simple.txt
1318+
echo "##### END: $object ####\n" >>${logs_dir}/logs_${test_name}_simple.txt
1319+
done
1320+
for object in "psmdb psmdb-backup psmdb-restore pods deployments services events sts"; do
1321+
kubectl_bin get $object --all-namespaces >${logs_dir}/logs_${test_name}_$object.yaml
1322+
done
1323+
fi
1324+
}
1325+
12771326
check_passwords_leak() {
12781327
secrets=$(kubectl_bin get secrets -o json | jq -r '.items[].data | to_entries | .[] | select(.key | (contains("_PASSWORD"))) | .value')
12791328
echo secrets=$secrets
@@ -1295,7 +1344,7 @@ check_passwords_leak() {
12951344
if [[ ${c} =~ "pmm" ]]; then
12961345
continue
12971346
fi
1298-
kubectl_bin -n "$NS" logs $p -c $c > ${TEMP_DIR}/logs_output-$p-$c.txt
1347+
kubectl_bin -n "$NS" logs $p -c $c >${TEMP_DIR}/logs_output-$p-$c.txt
12991348
echo logs saved in: ${TEMP_DIR}/logs_output-$p-$c.txt
13001349
for pass in $passwords; do
13011350
count=$(grep -c --fixed-strings -- "$pass" ${TEMP_DIR}/logs_output-$p-$c.txt || :)

0 commit comments

Comments
 (0)