首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >helm测试失败时回滚helm释放

helm测试失败时回滚helm释放
EN

Stack Overflow用户
提问于 2021-07-16 01:45:17
回答 1查看 54关注 0票数 1

假设我已经发布了与之相关的测试套件。

因此,典型的安装将如下所示:

代码语言:javascript
复制
helm upgrade --install service service/

不久之后:

代码语言:javascript
复制
$ helm test service-test
NAME: service
LAST DEPLOYED: Thu Jul 15 15:45:40 2021
NAMESPACE: default
STATUS: deployed
REVISION: 4
TEST SUITE:     service-test
Last Started:   Thu Jul 15 15:45:45 2021
Last Completed: Thu Jul 15 15:46:00 2021
Phase:          Succeeded

这就是测试套件的快乐路径。

但让我们想一想不那么令人愉快的场景:

代码语言:javascript
复制
$ helm test service-test
NAME: service
LAST DEPLOYED: Thu Jul 15 15:45:40 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE:     service-test
Last Started:   Thu Jul 15 15:25:48 2021
Last Completed: Thu Jul 15 15:26:54 2021
Phase:          Failed

所以有明显的失败迹象,“失败”的子字符串可以被查找来触发helm rollback service 0,但是这种方法在我看来很奇怪。

如何使用helm内置机制或其他不涉及将helm test命令输出输送到sed/awk的工具正确地回滚失败的测试套件

EN

回答 1

Stack Overflow用户

发布于 2021-07-21 01:06:07

简单的答案是: helm hooks。

按照目前在helm发布管理中设计的方式,测试必须有注释,以便helm能够识别发布的终端状态。

此外,还有一种特殊的机制,可以在测试失败时触发就地回滚。请记住,在这种情况下,与测试套件相关的所有资源都会被清除,因此必须监视helm历史记录以获得实际的发布结果(或者删除hook-failed以对其进行调试)。

解决方案:

代码语言:javascript
复制
apiVersion: batch/v1
kind: Job
metadata:
  name: "{{ .Release.Name }}-test"
  labels:
    app: {{ .Release.Name }}
    release: {{ .Release.Name }}
  annotations:
    "helm.sh/hook": test-success, post-upgrade
    "helm.sh/hook-delete-policy": hook-succeeded, hook-failed
    "helm.sh/hook-weight": "1"

如果我没弄错的话,这个注解可以翻译成以下内容:

  • 在升级后运行此测试(即pod已启动,测试的状态为
  • fail release running)
  • monitor rollback如果测试指示失败,则所有测试均顺利进行。如果测试没有失败指示,则一切顺利,没有进一步的操作) required
  • regardless of test result清理与测试套件关联的所有资源(在我的案例中为1个作业和2个pod)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68398565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档