Kubernetes helm 如果一个版本没有要发布的内容,我怎么能命令Helm不要抛出错误呢?
我有一个舵图部署到三个环境(开发、阶段和产品)。My正在按如下方式运行此命令:Kubernetes helm 如果一个版本没有要发布的内容,我怎么能命令Helm不要抛出错误呢?,kubernetes-helm,bitbucket-pipelines,Kubernetes Helm,Bitbucket Pipelines,我有一个舵图部署到三个环境(开发、阶段和产品)。My正在按如下方式运行此命令: helm upgrade --install --namespace=$DEPLOYMENT_ENV ingress-external-api -f ./ingress-external-api/values-$DEPLOYMENT_ENV.yaml ./ingress-external-api --atomic 其中$DEVELOPMENT\u ENV是dev、stage或prod 这里的重要事实是,只有valu
helm upgrade --install --namespace=$DEPLOYMENT_ENV ingress-external-api -f ./ingress-external-api/values-$DEPLOYMENT_ENV.yaml ./ingress-external-api --atomic
其中$DEVELOPMENT\u 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找不到任何东西来替换它的模板,我如何告诉他不要抛出错误?我不确定这应该是helm的责任。为什么要用缺少的值更新dev/stage?看起来有点奇怪 如果您不打算在那里更新任何内容,只需在生产中运行一次即可 如果您坚持这样做,那么也有可能在Bash中“撒谎”返回代码,并在管道级别实现它
如果您真的不想部署任何东西,可以使用空values.yaml文件,然后将ifs和循环添加到模板文件中。 基本上,您必须用空结构填充values.yaml,例如:
my-release:
value:
other-value:
然后,您可以执行以下操作:
{{ if .Values.my-release.value }}
我怎么能告诉赫尔姆不要犯错误呢
在命令末尾添加“| | true”
,如下所示:
helm upgrade --install --namespace=$DEPLOYMENT_ENV ingress-external-api -f ./ingress-external-api/values-$DEPLOYMENT_ENV.yaml ./ingress-external-api --atomic
helm升级--install--namespace=$DEPLOYMENT_ENV…|正确
工作原理
bitbucket pipelines.yml
文件中的大多数命令都是在Unix上运行的bash/shell命令。运行yml脚本的程序将查找每个命令的错误退出代码,以查看该命令是否失败(停止脚本)或成功(移动到下一个命令)
将“| | true”
添加到shell命令末尾时,表示“忽略任何错误,并始终返回成功代码0”。下面是一个演示,您可以在本地计算机的终端窗口中运行:
echo“hello”成功运行
echo$?#检查最后一个命令的状态代码。它应该是0(成功)
echo xx“hello”#运行时出错,因为没有名为“echo xx”的命令
echo$?#检查最后一个命令的状态代码。它应该是127(错误)
echo xx“hello”| | true#运行成功,即使“echo xx”运行时出错
echo$?#检查最后一个命令的状态代码。它应该是0(成功)
有关外壳返回代码的更多信息:
错误:发布入口外部api失败:未访问任何对象