Tekton:如何删除成功的管道运行?



我期望的tekton用例很简单:

  • 成功的管道运行应该在x天后删除
  • 失败的管道运行不应该被自动删除。

我计划在初始清理任务中执行清理。在我看来,这似乎比注释或cronjob方法更好。

直接的方法:

失败
  • :tkn delete似乎没有多大帮助,因为它不区分成功与否。
  • :oc delete --field-selector ...不包含隐藏良好但表达能力强的域status.conditions[0].type==Succeeded

间接方法(首先过滤一个podnames列表,然后删除它们——一点也不优雅):

失败
  • :用-o=jsonpath...过滤输出似乎代价高昂,条件数组似乎破坏了语句,因此(为什么?!)返回所有内容…不是可行的
  • 我的最后一次尝试是tkn pipelineruns list --show-managed-fields和解析这个sed/awk…这很恶心……但至少它做了我想让它做的事…而且很有效率。但是当输出的设计在未来的版本中发生变化时,它可能会变得脆弱…

你有更好更优雅的方法吗?非常感谢!

在没有更好的解决方案之前,我将发布我当前的解决方案(及其缺点):

我们的清理任务现在围绕以下解决方案构建,计算tkn pipelineruns list返回的表:

tkn pipelineruns list --show-managed-fields -n e-dodo-tmgr --label tekton.dev/pipeline=deploy-pipeline | awk '$6~/Succeeded/ && $3~/day|week|month/ {print $1}'

优势:

  • 不需要大量的调用或额外的计算。

缺点:

  • 时间限制为"超过一小时/一天/一周…"但这是可以接受的,因为只关注成功的构建。我猜这个设计很脆弱,因为随着tkn-Client的变化,表的格式可能会改变,这意味着awk将选择错误的列,或类似的模式问题。

总而言之,我希望这个解决方案能够一直保持下去,直到出现一些更有用的客户端功能,使所需的信息可以直接过滤。实际上我希望是tkn pipelineruns delete --state successful --period P1D之类的东西。时间周期的符号来自ISO8601。

为了完整起见,我在这里粘贴了kubectl/oc本机命令,以方便没有tkn cli的用户使用。根据需要替换target-namespace

删除失败的管道运行:

kubectl -n target-namespace delete pipelinerun $(kubectl -n target-namespace get pipelinerun -o jsonpath='{range .items[?(@.status.conditions[*].status=="False")]}{.metadata.name}{"n"}{end}')

删除成功的pipelineruns:

kubectl -n target-namespace delete pipelinerun $(kubectl -n target-namespace get pipelinerun -o jsonpath='{range .items[?(@.status.conditions[*].status=="True")]}{.metadata.name}{"n"}{end}')

相关内容

最新更新