Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes helm 如果一个版本没有要发布的内容,我怎么能命令Helm不要抛出错误呢?_Kubernetes Helm_Bitbucket Pipelines - Fatal编程技术网

Kubernetes helm 如果一个版本没有要发布的内容,我怎么能命令Helm不要抛出错误呢?

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

我有一个舵图部署到三个环境(开发、阶段和产品)。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

这里的重要事实是,只有
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失败:未访问任何对象