Thank you for reading this post, don't forget to subscribe!
Есть следующая проблема если при деплое helm чартов отменили job pipeline то helm release переходит в состояние pending-(update/upgrade)
для решения добавим башизма:
в ci/cd
пишем
а в самом скрипте пишем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#!/bin/bash # find release with status 'pending' release=$(helm ls --pending --short -n "$NAMESPACE" | grep -iE 'airflow-exporter|airflow-scheduler|airflow-webserver|app|app2'); # this cycle necessary if we have several release with status 'pending' for RELEASE in `echo $release`; do # search condition for release with status 'pending' if [[ ${#RELEASE} -gt 0 ]] then # get number of last good deploy GOOD_REVISION=$(helm history "$RELEASE" -o json -n "$NAMESPACE" | jq '[.[] | select(.status == "deployed")] | max_by(.revision) | .revision') # condition for check exist or not number of last good deploy, if not exist script will be brake if [[ "${GOOD_REVISION}" == 'null' ]] then echo "ERROR: We do not have any deployed releases, and we can not make rollback" echo "You should manual deleted this release: $RELEASE, and restart deploy" echo "show all release with 'pending' status" echo "" helm ls --pending --short -n "$NAMESPACE" exit 1; fi echo "" echo "Starting rollback release $RELEASE to last deployed revision $GOOD_REVISION in namespace $NAMESPACE" echo "" helm rollback --wait --timeout 500s "$RELEASE" "$GOOD_REVISION" -n "$NAMESPACE" echo "______________________________________" fi ; done |
на 4ой строчке пишем все релизы с которыми будем работать дальше они будут цепляться по циклу. это нужно чтобы один пайлпайн не цеплял другой
чтобы потестить как это работает нужно перевести release в этот статус.
для этого создаём новый чарт:
helm create test
далее правим в template deployment например пор на котором слушает nginx с 80 например на 81
и можно запускать
helm upgrade --install --wait --timeout 200m test -f values.yaml ./ -n dev
и всё, 200 минут релиз будет стоять в состоянии pending- так как из-за порта не может подняться и мы сказали что нужно ждать.
можно тестить скрипт.