Skip to content
docktionary

Snippets / Helm

Helm post-upgrade hook (migration Job)

A Job that runs automatically after every helm upgrade -- the standard shape for a database migration step.

helmhookjobmigration
templates/migrate-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  # Hook Jobs need a unique name per release *and* per revision --
  # reusing the same name on the next upgrade would collide with the
  # still-around Job from the last one.
  name: {{ .Release.Name }}-migrate-{{ .Release.Revision }}
  annotations:
    "helm.sh/hook": post-upgrade
    "helm.sh/hook-weight": "0"
    # Deletes the Job once it succeeds, so completed migration Jobs
    # don't pile up across every release. A failed one is left in
    # place on purpose, so you can read its logs before retrying.
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: migrate
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          command: ["npm", "run", "migrate"]