如何在运行 helm uninstall 命令之前检查 Helm 版本是否存在

问题描述 投票:0回答:2

如果只有一个版本(基础设施)已经存在,我想在 Azure DevOps 管道中的 helm 卸载命令中添加一个条件,我想卸载它。我怎样才能做到这一点?

- task: HelmDeploy@0
        displayName: Helm uninstall test
        inputs:
          connectionType: Kubernetes Service Connection
          kubernetesServiceEndpoint: dev-test
          command: uninstall
          chartType: FilePath
          chartPath: infra
          waitForExecution: true
          namespace: test
          arguments: infra
        continueOnError: true
azure-devops azure-pipelines kubernetes-helm
2个回答
1
投票

旧答案

您基本上想要实现的是让命令的退出代码等于 0。通常,您可以执行以下操作来实现此行为:

helm uninstall <MY_RELEASE_NAME> -n my-k8s-namespace || true

在这种情况下,命令的退出代码将始终为 0,即使在给定版本不存在时 helm uninstall 命令以不同的退出代码退出(在您的情况下为 1)。

要检查上一个命令的退出代码,请执行以下操作:

# try uninstalling a non existing release
helm uninstall <NON_EXISTING_RELEASE_NAME> -n my-k8s-namespace

# check the exit code for that previous command
echo $?

如果给定的 k8s 命名空间中不存在 helm 版本,则返回 1。

新答案

我根据您的评论更新了答案。您可以执行以下操作:

helm status <MY_RELEASE_NAME> && helm uninstall <MY_RELEASE_NAME> 

使用

&&
运算符时,仅当其前面的命令成功时,才会执行该运算符后面的命令。因此,只有当前面的
helm status <my_release_name>
命令返回等于 0 的退出代码(这意味着找到了具有给定名称的 Helm 版本)时,才会卸载您的 Helm 版本。不过,这可能会破坏您的 CI/CD 管道(作业),因为当找不到与给定名称匹配的版本时,
helm status <my_release_name>
命令会返回非零退出代码。为了避免这种情况,你更进一步,这样做:

helm status <MY_RELEASE_NAME> && helm uninstall <MY_RELEASE_NAME> || true

这样做,即使

helm status
helm uninstall
命令无法找到具有给定名称的 Helm 版本,上述表达式的退出代码也将为 0。

答案的灵感来自这篇文章的已接受答案。


0
投票

您只需将

--ignore-not-found
选项传递给
helm uninstall
命令(请参阅官方文档)。

像这样:

helm uninstall <MY_RELEASE_NAME> -n <MY_K8S-NAMESPACE> --ignore-not-found
© www.soinside.com 2019 - 2024. All rights reserved.