Как контролировать развертывание openshift (конвейер CI / CD)? - PullRequest
1 голос
/ 10 июня 2019

Мы использовали конфигурацию развертывания с триггером изменения изображения, чтобы при появлении нового изображения в настроенном потоке изображений запускалось новое развертывание.Это сработало относительно хорошо, но теперь мы получили новый вызов.Конвейер должен дождаться завершения развертывания и отразить успех / неудачу в качестве результата работы.

Мы рассчитывали пока приостановить развертывание, пока создается изображение.Затем, после создания, отмените развертывание и разверните его в явном виде, затем дождитесь завершения развертывания:

# To work well with previously auto triggered deployments, pause rollouts if present
oc rollout pause dc "$SOURCE_NAME" || true

# apply deployment config
# TODO: Pass all the template parameters
oc process -f delivery-automation/openshift/jdk-service-template.yml -p "SOURCE_NAME=$SOURCE_NAME" -p "IMAGE_NAME=$IMAGE_NAME" | oc apply -f - --validate
# tag the correct image version as latest
# https://docs.openshift.com/container-platform/3.4/dev_guide/application_lifecycle/promoting_applications.html
oc tag "$OC_PROJECT_STORAGE/$IMAGE_NAME:$SOURCE_VERSION" "$IMAGE_NAME:latest"

# gogogogo
oc rollout resume dc "$SOURCE_NAME" || true
#new deployment with latest image
oc rollout latest "$SOURCE_NAME"
#check for rollout is success
oc rollout status "dc/$SOURCE_NAME" --watch

Это почти работает, за исключением того, что оно по-прежнему вызывает развертывания при изменении образа, которое затем завершается неудачно на oc rollout latest, поскольку другое развертываниеуже выполняется.

РЕДАКТИРОВАТЬ: Команда oc rollout resume фактически запускает развертывание при изменении изображения!

Мы также пытались изменить триггер, чтобы не запускать егоавтоматически безрезультатно:

  triggers: 
    - type: ImageChange
      imageChangeParams:
        automatic: false
        containerNames:
          - ${SOURCE_NAME}
        from:
          kind: ImageStreamTag
          name: '${IMAGE_NAME}:latest'

Мы также пытались полностью удалить триггер изменения изображения, но затем развертывание не выполняется, поскольку оно не может разрешить фактическое изображение.

1 Ответ

0 голосов
/ 12 июня 2019

У меня пока неаккуратное решение, и я буду рад, если кто-то предложит лучшую альтернативу:

# reconfigure service and deployment
- oc process -f service-template.yml -p "SOURCE_NAME=$SOURCE_NAME" -p "IMAGE_NAME=$IMAGE_NAME" | oc apply -f - --validate
# tag current version as latest
- oc tag "$OC_PROJECT_STORAGE/$IMAGE_NAME:$SOURCE_VERSION" "$IMAGE_NAME:latest"
# cancel any pending rollout, last one wins!
- oc rollout cancel dc "$SOURCE_NAME" || true
# cancel any pending rollout, make sure cancel completed
- oc rollout status "dc/$SOURCE_NAME" --watch || true
# trigger new rollout
- oc rollout latest "$SOURCE_NAME" -o json | jq -r '"Rollout started - " + (.status.latestVersion | @text)'
# follow up on latest rollout
- oc rollout status "dc/$SOURCE_NAME" --watch

Это оставляет мне некоторые остаточные отмененные развертывания, но функционально это удовлетворительно.

...