Pular para o conteúdo

Rollback

Escopo: deploy. O rollback é por serviço: volta ao deployment anterior do serviço, com as variáveis resolvidas daquela versão (não as atuais).

Liste os deploys do serviço e pegue o id de um que esteja ready e seja anterior ao problema.

Janela do terminal
SUF=$(date +%s)-$RANDOM
H="Authorization: Bearer $NEBULAR_TOKEN"
P=$(curl -sS -X POST "$NEBULAR_API/v1/projects" -H "$H" -H "Content-Type: application/json" \
-H "Idempotency-Key: rb-proj-$SUF" -d "{\"name\": \"rb-$SUF\"}" | jq -r .id)
S=$(curl -sS -X POST "$NEBULAR_API/v1/projects/$P/services" -H "$H" -H "Content-Type: application/json" \
-H "Idempotency-Key: rb-svc-$SUF" \
-d '{"name": "app", "kind": "app", "visibility": "private", "source": {"type": "image", "ref": "ghcr.io/org/app:1.0"}}' | jq -r .id)
curl -sS "$NEBULAR_API/v1/projects/$P/services/$S/deployments" -H "$H"
{"items": [], "next_cursor": null, "has_more": false}

Em um serviço com histórico, extraia os pares com jq -r '.items[] | "\(.id)\t\(.status)"'.

Janela do terminal
SUF=$(date +%s)-$RANDOM
H="Authorization: Bearer $NEBULAR_TOKEN"
P=$(curl -sS -X POST "$NEBULAR_API/v1/projects" -H "$H" -H "Content-Type: application/json" \
-d "{\"name\": \"rb2-$SUF\"}" | jq -r .id)
S=$(curl -sS -X PATCH "$NEBULAR_API/v1/projects/$P/services/web" -H "$H" -H "Content-Type: application/json" \
-d '{"source": {"type": "image", "ref": "ghcr.io/org/app:1.0"}}' | jq -r .id)
D=$(curl -sS -X POST "$NEBULAR_API/v1/projects/$P/services/$S/deployments" -H "$H" \
-H "Content-Type: application/json" -d '{}' | jq -r .id)
# o destino do rollback precisa ter terminado com sucesso (ready)
delay=2
for i in $(seq 1 40); do
st=$(curl -sS "$NEBULAR_API/v1/projects/$P/services/$S/deployments/$D" -H "$H" | jq -r .status)
echo "tentativa $i: $st"
case "$st" in
ready) break ;;
failed|blocked|canceled|superseded) echo "deploy terminou em $st" >&2; exit 1 ;;
esac
sleep "$delay"; delay=$(( delay * 2 > 30 ? 30 : delay * 2 ))
done
[ "$st" = ready ]
curl -sS -X POST "$NEBULAR_API/v1/projects/$P/services/$S/deployments/$D/rollback" \
-H "$H" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: rollback-$D" -d '{}'
{"id": "01j9zkbssrj776q2jrwy8cf13v", "status": "queued"}

Acompanhe o novo deploy com polling até ready.

Resposta O que fazer
403 forbidden Falta o escopo deploy.
404 not_found Deploy, serviço ou projeto inexistente ou fora do seu acesso.
409 nothing_to_rollback O deploy de destino não terminou com sucesso (ready). Escolha outro ou espere.
409 deploy_in_progress Há um deploy em andamento; espere terminar e tente de novo.
deploy do rollback failed Leia o log de build; se o problema era dado e não código, o rollback não o desfaz (migrations: veja Migrações).