Skip to content

Commit 6e4fe5f

Browse files
authored
Merge pull request #5 from cookielab/helm_rollback
feature: Create helm-rollback.sh
2 parents 6bb1596 + c9aef14 commit 6e4fe5f

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,10 @@
1313
- `$AWS_ROLE_ARN` = ENV variable for Role ARN
1414
- `$AWS_ROLE_SESSION_NAME` = ENV variable for session name
1515
- `$OIDC_TOKEN` = ENV variable for providing OIDC token
16+
- `helm-rollback.sh` - Script for rolling back failed Helm releases
17+
- Checks for pending or failed releases
18+
- Waits up to 15 minutes for pending releases to complete
19+
- If still pending/failed after wait, rolls back to previous version
20+
- Requirements:
21+
- `$HELM_RELEASE_NAME` = ENV variable for Helm release name
22+
- `$KUBE_NAMESPACE` = ENV variable for Kubernetes namespace

scripts/helm-rollback.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/bin/bash
2+
3+
export RELEASE=$(echo "${HELM_RELEASE_NAME:0:36}" | sed -E 's/-+$//')
4+
5+
FAILED=$(helm list --failed -n $KUBE_NAMESPACE | grep ^${RELEASE}\\s | wc -l )
6+
PENDING=$(helm list --pending -n $KUBE_NAMESPACE | grep ^${RELEASE}\\s | wc -l)
7+
8+
if [ "$PENDING" -gt 0 ]; then
9+
echo "Pending release found."
10+
helm list --pending -n $KUBE_NAMESPACE
11+
echo "Waiting for 15 minutes ..."
12+
for i in $(seq 1 15); do
13+
sleep 60
14+
echo "Still wating for $i minutes"
15+
PENDING=$(helm list --pending -n $KUBE_NAMESPACE | grep ^${RELEASE}\\s | wc -l)
16+
if [ "$PENDING" -eq 0 ]; then
17+
break
18+
fi
19+
done
20+
fi
21+
22+
FAILED=$(helm list --failed -n $KUBE_NAMESPACE | grep ^${RELEASE}\\s | wc -l )
23+
PENDING=$(helm list --pending -n $KUBE_NAMESPACE | grep ^${RELEASE}\\s | wc -l)
24+
25+
if [ "$PENDING" -gt 0 -o "$FAILED" -gt 0 ]; then
26+
echo "Pending or failed release found."
27+
helm list --failed --pending -n $KUBE_NAMESPACE
28+
export LAST=$(helm list --failed --pending -n $KUBE_NAMESPACE | grep ^${RELEASE}\\s | awk '{print $3-1}')
29+
echo "Rolling back to ${LAST}..."
30+
helm rollback $RELEASE $LAST -n $KUBE_NAMESPACE
31+
else
32+
echo "No pending/failed release, go ahead."
33+
fi

0 commit comments

Comments
 (0)