Управление развертыванием, если тесты не пройдены - PullRequest
0 голосов
/ 01 марта 2019

Можно ли заставить развертывание диаграмм Helm завершиться с ошибкой, если тест, выполненный до сбоя установки?Поскольку теперь, несмотря на неудачу теста, статус «Развернуто».

Мой тест, который проверяет, развернут ли MongoDB и доступен ли он:

apiVersion: v1
kind: Pod
metadata:
  name: "{{ .Release.Name }}-database-connection-test"
  annotations:
    "helm.sh/hook": pre-install,test-success
    "helm.sh/hook-delete-policy": before-hook-creation
spec:
  containers:
  - name: {{ .Release.Name }}-database-connection-test
    image: {{ template "mongo.image" . }}
    imagePullPolicy: Always
    env:
      - name: HOST
        value: {{ .Values.mongo.host }}
      - name: PORT
        value: {{ .Values.mongo.port | quote }}
      - name: DATABASE_NAME
        value: {{ .Values.mongo.databasename }}
      - name: USERNAME
        value: {{ .Values.mongo.username }}
      - name: PASSWORD
        value: {{ .Values.mongo.password }}
    command: ["sh", "-c", "mongo --username $USERNAME --password $PASSWORD --authenticationDatabase $DATABASE_NAME --host $HOST --port $PORT"]
  restartPolicy: Never

1 Ответ

0 голосов
/ 04 марта 2019

Таким образом, в целом этого можно достичь, задав тип ресурса Job.Задание будет блокировать Тиллера, пока оно не будет завершено.
Здесь есть небольшая проблема: если задание не будет завершено, оно будет блокировать развертывание диаграммы Хелма на бесконечное время.Чтобы избежать этого, нужно установить spec.activeDeadlineSeconds.Это приведет к истечению времени выполнения задания, если оно не будет завершено до установленного временного предела.

apiVersion: batch/v1
kind: Job
metadata:
  name: "{{ .Release.Name }}-database-connection-test"
  annotations:
    "helm.sh/hook": pre-install,test-success
    "helm.sh/hook-delete-policy": before-hook-creation
spec:
  ttlSecondsAfterFinished: 300
  backoffPolicy: 1
  activeDeadlineSeconds: 100
  template:
    spec:
      containers:
      - name: {{ .Release.Name }}-database-connection-test
        image: {{ template "mongo.image" . }}
        imagePullPolicy: Always
        env:
          - name: HOST
            value: {{ .Values.mongo.host }}
          - name: PORT
            value: {{ .Values.mongo.port | quote }}
          - name: DATABASE_NAME
            value: {{ .Values.mongo.databasename }}
          - name: USERNAME
            value: {{ .Values.mongo.username }}
          - name: PASSWORD
            value: {{ .Values.mongo.password }}
        command: ["sh", "-c", "mongo --username $USERNAME --password $PASSWORD --authenticationDatabase $DATABASE_NAME --host $HOST --port $PORT"]
      restartPolicy: Never

Это своего рода обходной путь, потому что изначально тестовая аннотация Helm не должна использоваться вместе с другими перехватчиками.

...