Многие используют
docker-compose или kubectl apply напрямую, но часто в реальной инфраструктуре требуются условные проверки, ветвления, откаты, повторные попытки. И тут bash оказывается неожиданно полезным инструментом.▪️ Пример 1. Bash + docker-compose
#!/usr/bin/env bash
set -euo pipefail
echo "[*] Deploying database..."
docker-compose -f compose.db.yml up -d
sleep 10
echo "[*] Checking DB health..."
docker-compose exec db pg_isready -U postgres || {
echo "DB is not ready, aborting!"
exit 1
}
echo "[*] Deploying app..."
docker-compose -f compose.app.yml up -d
Скрипт запускает сначала базу, ждет, проверяет ее готовность и только потом запускает приложение. Такой контроль docker-compose сам по себе не умеет.
▪️ Пример 2. Bash + Kubernetes
#!/usr/bin/env bash
set -euo pipefail
NAMESPACE="staging"
echo "[*] Applying secrets..."
kubectl apply -f secrets.yml -n $NAMESPACE
echo "[*] Deploying app..."
kubectl apply -f app.yml -n $NAMESPACE
echo "[*] Waiting for rollout..."
kubectl rollout status deployment/myapp -n $NAMESPACE --timeout=60s || {
echo "Rollout failed, rolling back..."
kubectl rollout undo deployment/myapp -n $NAMESPACE
}
Тут добавлена проверка статуса роллаута и откат, если приложение не поднялось.
▪️ Пример 3. Управление конфигами и миграциями
Bash может быть связующим звеном:
сначала подгружаем env-настройки,
потом запускаем миграции БД,
и только если они успешны - применяем манифесты.
source .env
echo "[*] Running migrations..."
docker-compose run --rm app ./manage.py migrate || exit 1
echo "[*] Applying manifests..."
kubectl apply -f k8s/ -n $NAMESPACE
BashTex 📱 #bash