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

操作系统信息
华为云虚拟机

LSB Version: :core-4.1-amd64:core-4.1-noarch

Distributor ID: CentOS

Description: CentOS Linux release 7.9.2009 (Core)

Release: 7.9.2009

Codename: Core

8C/16G

Kubernetes版本信息
v1.22.10

容器运行时
Client:

Version: 20.10.8

API version: 1.41

Go version: go1.16.6

Git commit: 3967b7d

Built: Fri Jul 30 19:50:40 2021

OS/Arch: linux/amd64

Context: default

Experimental: true

Server: Docker Engine - Community

Engine:

Version: 20.10.8

API version: 1.41 (minimum version 1.12)

Go version: go1.16.6

Git commit: 75249d8

Built: Fri Jul 30 19:55:09 2021

OS/Arch: linux/amd64

Experimental: false

containerd:

Version: v1.4.9

GitCommit: e25210fe30a0a703442421b0f60afac609f950a3

runc:

Version: 1.0.1

GitCommit: v1.0.1-0-g4144b638

docker-init:

Version: 0.19.0

GitCommit: de40ad0

KubeSphere版本信息
v3.3.1。在线安装。使用kk安装。

同标题:

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 我也遇到了多分支流水线没有删除记录的问题,你那边有什么好的解决方案吗?