Деплой в куб через GitLab: как вывести ошибку деплоя в журнал pipeline?

У нас есть GitLab, в которой pipeline раскатывает изменения в k8s через helm.

У меня нет доступа к yaml-файлам, все что я вижу - запуск этой команды, которая завершается с ошибкой:

helm upgrade $([ -n "${USE_CONTEXT}" ] && \
echo --kube-context "${USE_CONTEXT}") --install --atomic --wait --timeout=10m $([ -n "${FORCE_DEPLOY}" ] && \
echo --set dorestartme=$(date +%s) ) --set image.repository="${CI_ARTIFACTS_HOST}:${CI_ARTIFACTS_PORT}/docker/${CI_PROJECT_NAME}" --set image.tag=${CI_COMMIT_SHORT_SHA} $([ -f "${HELM_VALUES}/all.yaml" ] && \
echo -f "${HELM_VALUES}/all.yaml" ) $([ -f "${HELM_VALUES}/${UNION_NAMESPACE}.yaml" ] && \
echo -f "${HELM_VALUES}/${UNION_NAMESPACE}.yaml" ) $([ -f "${HELM_VALUES}/${TARGET_NAMESPACE}.yaml" ] && \
echo -f "${HELM_VALUES}/${TARGET_NAMESPACE}.yaml" ) $([ -f "${HELM_VALUES}/${CI_PROJECT_NAME}.yaml" ] && \
echo -f "${HELM_VALUES}/${CI_PROJECT_NAME}.yaml" ) $([ -f "${HELM_VALUES}/${UNION_NAMESPACE}-${CI_PROJECT_NAME}.yaml" ] && \
echo -f "${HELM_VALUES}/${UNION_NAMESPACE}-${CI_PROJECT_NAME}.yaml" ) $([ -f "${HELM_VALUES}/${TARGET_NAMESPACE}-${CI_PROJECT_NAME}.yaml" ] && \
echo -f "${HELM_VALUES}/${TARGET_NAMESPACE}-${CI_PROJECT_NAME}.yaml" ) --set "app.profiles=${APP_PROFILES}" --set "app.name=${APP_NAME}" --set "app.kube_cluster_name=${KUBE_CLUSTER_NAME:-NaN}" --set "kubeClusterQN=${KUBE_CLUSTER_QN}" --set "app.dns_suffix=${DNS_SUFFIX}" --set "app.appdep=${L_APPDEP}" --set "app.appmission=${L_APPMISSION}" --set "app.appgate=${L_APPGATE}" --set "app.apptype=${L_APPTYPE}" --set "app.applangversion=${L_APPLANGVARSION}" -n "${TARGET_NAMESPACE}" ${APP_NAME} ${HELM_CHART_NAME}

Ошибка:

Error: UPGRADE FAILED: release *** failed, and has been rolled back due to atomic being set: timed out waiting for the condition
Uploading artifacts for failed job 00:01
Uploading artifacts...
Runtime platform                                    arch=amd64 os=linux pid=25415 revision=943fc252 version=13.7.0
deploy.env: found 1 matching files and directories 
Uploading artifacts as "dotenv" to coordinator... ok  id=238266 responseStatus=201 Created token=VSsYmxhx
Cleaning up file based variables 00:00
ERROR: Job failed: exit status 1

Почему произошла ошибка, не понятно. Каждый раз мы обращаемся к девопсам и ищем ошибку совместными усилиями пол дня. Смотрим рединесс-пробы (кибана), журнал инит-контейнера (не знаю где), наличие ресурсов в кубе (графана).

Мне эта ситуация надоела. Я хочу, чтобы к журнал писалось, какая именно ошибка произошла - не прошла рединесс проба, кончились ресурсы, ...

Вопрос - это ведь можно сделать? И если можно, то как? Хотелось бы прийти с непустыми руками. Комментарии в духе "идите договаривайтесь" не нужны, ни мы, ни руководство не можем повлиять на ситуацию. Хотелось бы получить ответ - эта часть сделана не правильно, нужно вот так, ...


Ответы (1 шт):

Автор решения: Sergey Mitrofanov

Предлагаю убрать --atomic если он не нужен. Тогда после неудавшейся инсталляции по руинам можно будет попытаться восстановить картину

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

Добавить в шаблон deployment доп отладочный контейнер.

      containers:
        - name: wait
          image: busybox
          command: [sleep, '600'] #вы ждете 10 минут

Теперь можно спокойно приаттачится к поду и смотреть его логи. Если лог доступен только через ci, то придется применять магию скриптов из следующей комбинации.

# Находим под
kubectl get pod -w
# Нужно будет искать по маске, так как у пода будет имя типа something-server-12345678-abcde
kubectl logs deployment/something-server-12345678-abcde

Ну и нужно будет еще поиграться с задержкой перед выводом лога.

→ Ссылка