Как я могу заставить выполнение команды 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"]