@@ -13,14 +13,44 @@ add_chart_repo() {
1313 helm repo update ${KB_ENT_REPO_NAME}
1414}
1515
16+ get_helm_release_status () {
17+ local release_name=$1
18+ helm list -n kb-system --all --filter " ^${release_name} $" --output json 2> /dev/null | yq e ' .[0].status // "unknown"' -
19+ }
20+
21+ rollback_abnormal_release () {
22+ local release_name=$1
23+ local release_status
24+ release_status=$( get_helm_release_status " ${release_name} " )
25+ if [[ -z " ${release_status} " || " ${release_status} " == " deployed" ]]; then
26+ return 0
27+ fi
28+
29+ echo " release ${release_name} status is ${release_status} , rollback to previous revision before upgrade"
30+ helm rollback -n kb-system " ${release_name} "
31+ local retry=0
32+ local max_retry=60
33+ while [[ $retry -lt $max_retry ]]; do
34+ sleep 2
35+ release_status=$( get_helm_release_status " ${release_name} " )
36+ if [[ " ${release_status} " == " deployed" ]]; then
37+ echo " release ${release_name} rollback success, status: deployed"
38+ return 0
39+ fi
40+ retry=$(( retry + 1 ))
41+ done
42+ echo " $( tput -T xterm setaf 1) ::error title=release ${release_name} rollback timeout, current status: ${release_status} $( tput -T xterm sgr0) "
43+ return 1
44+ }
45+
1646upgrade_charts_addon () {
1747 if [[ ! -f " ${MANIFESTS_FILE} " ]]; then
1848 echo " $( tput -T xterm setaf 1) ::error title=Not found manifests file:${MANIFESTS_FILE} $( tput -T xterm sgr0) "
1949 return
2050 fi
2151
2252 upgrade_flag=0
23- deploy_addons=$( helm list -n kb-system | (grep " kb-addon-" || true) | awk ' {print $1}' )
53+ deploy_addons=$( helm list -n kb-system --all | (grep " kb-addon-" || true) | awk ' $8 != "uninstalled" && $8 != "superseded" {print $1}' )
2454 charts_name=$( yq e " to_entries|map(.key)|.[]" ${MANIFESTS_FILE} )
2555 kubeblocks_version=" $( helm get metadata -n kb-system kubeblocks | (grep " VERSION:" | grep -v " APP_VERSION:" || true ) | awk ' {print $2}' ) "
2656 for chart_name in $( echo " $charts_name " ) ; do
@@ -44,6 +74,11 @@ upgrade_charts_addon() {
4474 if [[ $deploy_flag -eq 0 || -z " ${deploy_addon_tmp} " ]]; then
4575 continue
4676 fi
77+ # rollback abnormal release before upgrade
78+ if ! rollback_abnormal_release " ${deploy_addon_tmp} " ; then
79+ echo " $( tput -T xterm setaf 1) ::error title=skip upgrade addon ${chart_name} due to abnormal release:${deploy_addon_tmp} $( tput -T xterm sgr0) "
80+ continue
81+ fi
4782
4883 # check deploy addon commit id
4984 deploy_addon_commit_id=" "
0 commit comments