Docs-site rollback
When to use this
Section titled “When to use this”A commit to main in uvic-rcs/kestrel-docs has shipped a bad docs build — broken page, wrong copy, or a build regression that only surfaced in production. The bad image is live at kestrel.arbutus.cloud. This page is the emergency-button procedure to revert.
Rollback in one revert
Section titled “Rollback in one revert”image.tag in ubernetes-applications is managed by argocd-image-updater, not by MRs: the updater tracks the mutable main tag of git.computecanada.ca:4567/uvic-rcs/kestrel-docs with the digest strategy and commits new digests directly to main (commits titled build: automatic update of docs-kestrel). Do not revert one of those commits — the updater re-writes the bad digest on its next cycle.
Rollback is a single revert on the docs repo instead:
- In
uvic-rcs/kestrel-docs, find the bad commit onmainand revert it (Revert button on the commit in the GitLab UI, orgit revert <sha>and push). - CI rebuilds and publishes a fresh image under the
maintag. - argocd-image-updater sees the new digest and commits the updated
image.tagtoenvironments/arbutus/kestrel/kestrel-prod/docs/kestrel/values.yamlonubernetes-applications. - ArgoCD picks up the change within its ~3-minute poll interval (click Sync on the
docs-kestrelApplication for an immediate reconcile) and rolls the Deployment. - Verify at
https://kestrel.arbutus.cloudthat the bad content is gone.
End-to-end: most of the wait is the docs CI build plus one updater cycle — budget ~10 minutes.
Fallback: pin the previous digest
Section titled “Fallback: pin the previous digest”If the revert path is unavailable (docs CI is broken, or you need the site back before a rebuild can finish), pin the previous digest by hand — but disable the updater in the same change, or it overwrites your pin on its next cycle:
- Find the previous digest in the git history of
environments/arbutus/kestrel/kestrel-prod/docs/kestrel/values.yaml— eachbuild: automatic update of docs-kestrelcommit shows the digest it replaced. - In one MR against that file, set
imageUpdater.enabled: falseand setimage.tagto the previousmain@sha256:<digest>. - Merge; ArgoCD deploys the pinned image.
- Once the docs repo is fixed, remove both overrides in a follow-up MR to hand
image.tagback to the updater.
Why this works
Section titled “Why this works”Every docs-site deploy is a specific image digest (main@sha256:<digest>) pinned in environments/arbutus/kestrel/kestrel-prod/docs/kestrel/values.yaml, written there by argocd-image-updater. Because each digest is immutable, any previously deployed image normally still exists in the GitLab Container Registry (unless a registry cleanup policy has removed it). The docs-repo revert works because it publishes a fresh image whose digest the updater rolls forward to; the pin fallback works because the digest addresses the exact prior build directly.
Verification
Section titled “Verification”Once the rollback lands in ubernetes-applications (the updater’s write-back commit, or your pin MR), the docs-kestrel Application in ArgoCD goes from Synced → OutOfSync → Syncing → Synced. The pod re-rolls with a brief Terminating on the old pod. Open https://kestrel.arbutus.cloud in a browser (hard refresh to bypass CDN/browser cache) and confirm the previous content is live.
If the site still shows the bad content after 5 minutes, check:
kubectl -n docs-kestrel get deployment kestrel-docs-site -o yaml | grep image:— should show the rolled-back digest.kubectl -n docs-kestrel get pods— should showRunning 1/1with the reverted pod age.kubectl -n argo-cd describe application docs-kestrel— check for sync errors.