Как я могу дать команду Helm NOT выдать ошибку, если релизу нечего выпускать? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть таблица руля, развернутая в трех средах (dev, stage и prod). My выполняет эту команду следующим образом:

helm upgrade --install --namespace=$DEPLOYMENT_ENV ingress-external-api -f ./ingress-external-api/values-$DEPLOYMENT_ENV.yaml ./ingress-external-api --atomic

Где $DEVELOPMENT_ENV равно dev, stage или prod.

Важным фактом здесь является то, что только values-prod.yaml имеет правильное определение yaml. Все остальные values-dev.yaml и то же самое для stage пусты и поэтому не будут развертывать какие-либо выпуски.

Это приводит к следующей ошибке управления:

+ helm upgrade --install --namespace=$DEPLOYMENT_ENV ingress-external-api -f ./ingress-external-api/values-$DEPLOYMENT_ENV.yaml ./ingress-external-api --atomic
Release "ingress-external-api" does not exist. Installing it now.
INSTALL FAILED
PURGING CHART
Error: release ingress-external-api failed: no objects visited
Successfully purged a chart!
Error: release ingress-external-api failed: no objects visited

, что, кроме того, приводит к мой конвейер bitbucket останавливается и завершается неудачей.

Однако, как вы также можете видеть, это не помогло.

Поэтому мой вопрос заключается в том, как я могу сказать helm вообще не выдавать ошибку, если она может не нашли ничего, чтобы заменить его шаблон?

Ответы [ 3 ]

1 голос
/ 20 апреля 2020

Я не уверен, что это должно быть обязанностью руля. Почему вы хотите обновить dev / stage с отсутствующими значениями? Это кажется немного странным.

Если вы не собираетесь обновлять что-либо там, просто запустите его один раз в производстве.

Если вы настаиваете на том, чтобы делать это таким образом, есть также возможность 'l ie' о Ваш код возврата в Bash и реализовать его на уровне конвейера.

L ie о состоянии выхода

0 голосов
/ 25 апреля 2020

как я могу сказать Хелму вообще не выдавать ошибку?

Добавить " || true" в конец вашей команды, примерно так:

helm upgrade --install --namespace=$DEPLOYMENT_ENV ... || true

Как это работает

Большинство команд в файле bitbucket-pipelines.yml являются командами bash / shell, работающими на Unix. Программа, запускающая сценарий yml, будет искать коды ошибок для каждой команды, чтобы определить, была ли команда не выполнена (чтобы остановить сценарий) или успешно (чтобы перейти к следующей команде).

Когда вы добавьте "|| true" в конец команды оболочки, это означает «игнорировать любые ошибки и всегда возвращать код успеха 0». Вот демонстрация, которую вы можете запустить в окне терминала на локальном компьютере:

echo "hello" # Runs successfully
echo $? # Check the status code of the last command. It should be 0 (success)

echo-xx "hello" # Runs with error, becuase there is no command called "echo-xx"
echo $? # Check the status code of the last command. It should be 127 (error)

echo-xx "hello" || true # Runs with success, even though "echo-xx" ran with an error
echo $? # Check the status code of the last command. It should be 0 (success)

Дополнительная информация о кодах возврата оболочки:

0 голосов
/ 21 апреля 2020

Если вы действительно не хотите развертывать что-либо, вы можете использовать пустые файлы values.yaml, а затем добавить ifs и циклы в файлы шаблона. По сути, вы должны заполнить values.yaml пустой структурой, например:

my-release:
    value:
    other-value:

Затем вы можете сделать что-то вроде:

{{ if .Values.my-release.value }}
...