Как я могу заставить выполнение команды Tekton Task ждать, пока подготовленный модуль предыдущей задачи не будет готов для запросов

У меня есть конвейер OpenShift/Tekton, который развертывает приложение в тестовой среде. В запускается набор тестов приложения. Если все тесты пройдены, приложение развертывается в другой среде в Task C.

Проблема в том, что модуль развернут (с oc apply -f <deployment>), и до того, как модуль действительно будет готов к приему запросов, запускает набор тестов, и все тесты завершаются сбоем (поскольку он не может достичь конечных точек, определенных в тестовых примерах).

Есть ли элегантный способ убедиться, что модуль из готов к приему запросов, перед запуском выполнения Task B? Одно из решений, которое я видел, - это выполнять HTTP-запросы GET к конечной точке работоспособности, пока вы не получите ответ HTTP 200. У нас есть довольно много приложений, которые не предоставляют конечные точки HTTP, так что есть более «общий» способ убедиться, что модуль готов? Могу ли я, например, запросить конкретную запись в журнале? Существует оператор журнала, который всегда показывает, когда модуль готов к приему трафика.

Если это интересно, вот определение для Task A:

      apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: create-and-deploy-integration-server
spec:
  params:
    - name: release-name
      type: string
      description: The release name of the application
    - name: image-name
      type: string
      description: The name of the container image to use
    - name: namespace
      type: string
      description: The namespace (OCP project) the application resides in
    - name: commit-id
      type: string
      description: The commit hash identifier for the current HEAD commit
  steps:
    - name: create-is-manifest
      image: image-registry.openshift-image-registry.svc:5000/openshift/origin-cli
      script: |
        echo "Creating IntegrationServer manifest"
        cat << EOF > integrationserver.yaml
        apiVersion: appconnect.ibm.com/v1beta1
        kind: IntegrationServer
        metadata:
          name: $(params.release-name)
          namespace: $(params.namespace)
        spec:
          license:
            accept: true
            license: L-KSBM-BZWEAT
            use: CloudPakForIntegrationNonProduction
          pod:
            containers:
              runtime:
                image: image-registry.openshift-image-registry.svc:5000/$(params.namespace)/$(params.image-name)-$(params.commit-id)
                imagePullPolicy: Always
                resources:
                  limits:
                    cpu: 500m
                    memory: 500Mi
                  requests:
                    cpu: 300m
                    memory: 300Mi
          adminServerSecure: true
          router:
            timeout: 120s
          designerFlowsOperationMode: disabled
          service:
            endpointType: http
          version: 11.0.0.11-r2
          replicas: 1
          barURL: ''
        EOF
    - name: deploy-is-manifest
      image: image-registry.openshift-image-registry.svc:5000/openshift/origin-cli
      script: |
        echo "Applying IntegrationServer manifest to OpenShift cluster"
        oc apply -f integrationserver.yaml

1 ответ

После вашего шага это сделайте oc apply, вы можете добавить шаг ожидания, пока развертывание станет «доступным». Это для kubectl но должен работать так же с oc:

      kubectl wait --for=condition=available --timeout=60s deployment/myapp

Тогда следующая Задача может зависеть от этой Задачи с runAfter: ["create-and-deploy-integration-server"]

Другие вопросы по тегам