• DevOps
  • DevOps流水线冗余的流水线记录怎么删除?

pipelinerun 有自动清理策略,通过这个 cronjob

# kubectl get cronjob -A
NAMESPACE                  NAME     SCHEDULE       SUSPEND   ACTIVE   LAST SCHEDULE   AGE
kubesphere-devops-system   devops   0/30 * * * *   False     0        19m             7h19m

默认是 30 分钟执行一次,默认清理策略为:

一个 namespace 下 pipelinerun > 30 或者 pipelinerun 的 age 超过了 7 天(168 小时),则会将历史的 pipelinerun 删掉。

如果需要修改为更加敏感,可以通过:

kubectl edit cronjob devops -n kubesphere-devops-system

修改:

        spec:
          containers:
          - args:
            - --max-count=30
            - --max-age=168h

这段配置中: max-count 或者 max-age 的值,调整后,30 分钟整点的 cronjob 就会进行清理。

    chilianyi

    意思明白了

            spec:
              containers:
              - args:
                - --max-count=30
                - --max-age=1h
                - --condition=ignoreTime

    昨天修改的 今天早上追踪发现还是有之前的记录

    看了下这个 job 的代码,是先看 max-count 有没有达到,不过这个判断逻辑还有点问题,double 了。

    也就是 配置 max-count 是 30,需要一个 namespace 达到 60 才能触发删除,删除个数为 总量 - 30。

    然后再判断 需要删除的这些里,是否满足 max-age 这个条件,如果 condition=ignoreTime,则直接删掉,如果 没配置这个条件,就只会把满足 max-age 条件的 删除掉。

    所以这里首先需要达到 max-count 才会触发删除。

      chilianyi

      你好 这个job 代码在哪能看?

      还是没有删除

      condition=ignoreTime这个是什么意思?忽略时间?怎么解读?

        ithero 代码在这里:https://github.com/kubesphere-sigs/ks/blob/84549ddc3bd6e4d0cc736254a8d9b52f6bc76143/kubectl-plugin/pipeline/gc.go#L80

        这个判断条件有问题,所以 其实需要 double 以后才会触发 删除, 也就是 如果 配置的 max-count=30, 需要达到 60 才会触发删除。

        condition=ignoreTime,表示不考虑过期时间(max-age) 这个条件,不满足这个条件,也会删除。
        不加这个条件,不满足 max-age 的不会删除。

          18 天 后
          1 年 后
          6 个月 后

          在3.4版本,devops这个cronjob并不会清除 多分支流水线 产生的pipelinerun构建记录。

            9 个月 后

            peterZch 我也遇到了多分支流水线没有删除记录的问题,你那边有什么好的解决方案吗?