Skip to content

Commit cdaeccf

Browse files
committed
Push failed test k8s logs to S3 bucket
1 parent edcf842 commit cdaeccf

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

Jenkinsfile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,21 @@ void pushLogFile(String FILE_NAME) {
9797
}
9898
}
9999

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

@@ -211,6 +226,7 @@ void runTest(Integer TEST_ID) {
211226
return true
212227
}
213228
catch (exc) {
229+
pushK8SLogs("$testName")
214230
if (retryCount >= 1 || currentBuild.nextBuild != null) {
215231
currentBuild.result = 'FAILURE'
216232
return true

e2e-tests/functions

Lines changed: 47 additions & 0 deletions
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
@@ -329,6 +339,7 @@ wait_restore() {
329339
let retry+=1
330340
current_state=$(kubectl_bin get psmdb-restore restore-$backup_name -o jsonpath='{.status.state}')
331341
if [[ $retry -ge $wait_time || ${current_state} == 'error' ]]; then
342+
collect_k8s_logs
332343
kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) \
333344
| grep -v 'level=info' \
334345
| grep -v 'level=debug' \
@@ -542,6 +553,7 @@ retry() {
542553

543554
until "$@"; do
544555
if [[ $n -ge $max ]]; then
556+
collect_k8s_logs
545557
echo "The command '$@' has failed after $n attempts."
546558
exit 1
547559
fi
@@ -581,6 +593,7 @@ wait_for_running() {
581593
timeout=$((timeout + 1))
582594
echo -n '.'
583595
if [[ ${timeout} -gt 1500 ]]; then
596+
collect_k8s_logs
584597
echo
585598
echo "Waiting timeout has been reached. Exiting..."
586599
exit 1
@@ -603,12 +616,14 @@ wait_for_delete() {
603616
echo -n .
604617
let retry+=1
605618
if [ $retry -ge $wait_time ]; then
619+
collect_k8s_logs
606620
kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) \
607621
| grep -v 'level=info' \
608622
| grep -v 'level=debug' \
609623
| grep -v 'Getting tasks for pod' \
610624
| grep -v 'Getting pods from source' \
611625
| tail -100
626+
612627
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
613628
exit 1
614629
fi
@@ -624,6 +639,8 @@ compare_generation() {
624639

625640
current_generation="$(kubectl_bin get ${resource_type} "${resource_name}" -o jsonpath='{.metadata.generation}')"
626641
if [[ ${generation} != "${current_generation}" ]]; then
642+
collect_k8s_logs
643+
627644
echo "Generation for ${resource_type}/${resource_name} is: ${current_generation}, but should be: ${generation}"
628645
exit 1
629646
fi
@@ -984,6 +1001,7 @@ get_service_endpoint() {
9841001
return
9851002
fi
9861003

1004+
collect_k8s_logs
9871005
exit 1
9881006
}
9891007

@@ -1160,6 +1178,7 @@ wait_cluster_consistency() {
11601178
until [[ "$(kubectl_bin get psmdb "${cluster_name}" -o jsonpath='{.status.state}')" == "ready" ]]; do
11611179
let retry+=1
11621180
if [ $retry -ge $wait_time ]; then
1181+
collect_k8s_logs
11631182
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
11641183
exit 1
11651184
fi
@@ -1186,6 +1205,7 @@ check_backup_deletion() {
11861205
retry=0
11871206
until [[ $(curl -sw '%{http_code}' -o /dev/null $path) -eq 403 ]] || [[ $(curl -sw '%{http_code}' -o /dev/null $path) -eq 404 ]]; do
11881207
if [ $retry -ge 10 ]; then
1208+
collect_k8s_logs
11891209
echo max retry count $retry reached. something went wrong with operator or kubernetes cluster
11901210
echo "Backup was not removed from bucket -- $storage_name"
11911211
exit 1
@@ -1247,6 +1267,7 @@ function get_mongod_ver_from_image() {
12471267
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')
12481268

12491269
if [[ ! ${version_info} =~ ^([0-9]+\.){2}[0-9]+-[0-9]+$ ]]; then
1270+
collect_k8s_logs
12501271
printf "No mongod version obtained from %s. Exiting" ${image}
12511272
exit 1
12521273
fi
@@ -1259,6 +1280,7 @@ function get_pbm_version() {
12591280
local version_info=$(run_simple_cli_inside_image ${image} 'pbm-agent version' | $sed -r 's/^Version:\ (([0-9]+\.){2}[0-9]+)\ .*/\1/g')
12601281

12611282
if [[ ! ${version_info} =~ ^([0-9]+\.){2}[0-9]+$ ]]; then
1283+
collect_k8s_logs
12621284
printf "No pbm version obtained from %s. Exiting" ${image}
12631285
exit 1
12641286
fi
@@ -1299,6 +1321,31 @@ function generate_vs_json() {
12991321
echo ${version_service_source} | jq '.' >${target_path}
13001322
}
13011323

1324+
collect_k8s_logs() {
1325+
if [[ ${ENABLE_LOGGING} == "true" ]]; then
1326+
rm -f ${logs_dir}/logs_${test_name}_* || :
1327+
1328+
local check_namespaces="$namespace${OPERATOR_NS:+ $OPERATOR_NS}"
1329+
1330+
for ns in $check_namespaces; do
1331+
local pods=$(kubectl_bin get pods -o name | awk -F "/" '{print $2}')
1332+
for p in $pods; do
1333+
local containers=$(kubectl_bin -n "$ns" get pod $p -o jsonpath='{.spec.containers[*].name}')
1334+
for c in $containers; do
1335+
kubectl_bin -n "$ns" logs $p -c $c >${logs_dir}/logs_${test_name}_$p_$c.txt
1336+
echo logs saved in: ${logs_dir}/logs_${test_name}_$p_$c.txt
1337+
done
1338+
done
1339+
done
1340+
for object in "psmdb psmdb-backup psmdb-restore pods deployments services events sts"; do
1341+
echo "##### START: $object #####" >>${logs_dir}/logs_${test_name}_simple.txt
1342+
kubectl_bin get $object --all-namespaces >>${logs_dir}/logs_${test_name}_simple.txt
1343+
echo "##### END: $object ####\n" >>${logs_dir}/logs_${test_name}_simple.txt
1344+
kubectl_bin get $object --all-namespaces >${logs_dir}/logs_${test_name}_$object.yaml
1345+
done
1346+
fi
1347+
}
1348+
13021349
check_passwords_leak() {
13031350
local secrets
13041351
local passwords

0 commit comments

Comments
 (0)