Skip to content
Latchkey

GitLab CI Review App Deploy Failed (Kubernetes)

Review app jobs deploy a per-MR environment to Kubernetes. They fail when the image cannot be pulled, the namespace or RBAC is missing, or the cluster has a transient rollout problem.

What this error means

The review app job fails during deploy with a Kubernetes error such as ImagePullBackOff, forbidden, namespace not found, or a timed-out rollout.

gitlab-ci
error: deployment "review-mr-42" exceeded its progress deadline
pods are not ready: ImagePullBackOff / Error from server (Forbidden)

Common causes

Image cannot be pulled

A missing imagePullSecret or a not-yet-pushed image causes ImagePullBackOff.

RBAC or namespace missing

The service account lacks permissions, or the target namespace was not created.

Transient cluster hiccup during rollout

A momentary scheduling or node issue can fail a rollout that succeeds on retry.

How to fix it

Fix image access and namespace

Ensure the image is pushed and pullable, and the namespace and RBAC exist before rollout.

  1. Confirm the image tag was pushed in an earlier job.
  2. Create the namespace and an imagePullSecret for the registry.
  3. Grant the deploy service account the needed RBAC.

Gate review apps to MRs and clean up

Scope the review app to merge requests and stop the environment on close.

.gitlab-ci.yml
review:
  environment:
    name: review/${CI_COMMIT_REF_SLUG}
    on_stop: stop_review
  rules:
    - if: '${CI_PIPELINE_SOURCE} == "merge_request_event"'

How to prevent it

  • Push images before the deploy job and configure imagePullSecrets.
  • Provision namespaces and RBAC ahead of review app rollouts.
  • Add on_stop cleanup so review environments do not pile up.

Frequently asked questions

What causes ""review app" k8s failed"?
A missing imagePullSecret or a not-yet-pushed image causes ImagePullBackOff.
How do I fix "review app" k8s failed?
Ensure the image is pushed and pullable, and the namespace and RBAC exist before rollout.

Related guides

References

Latchkey auto-heals failures like this one - detected, fixed, and retried without you. Start free → 30-day trial · No credit card