首页 / 平台管理 / 流水线与归档管理 / 流水线存储策略 / 设置构建/发布流水线存储策略

设置构建/发布流水线存储策略

在日常功能迭代过程中,项目人员使用流水线对业务进行自动化处理时,将生成大量流水线执行记录和测试报告。执行记录和测试报告均保存在平台组件 etcd 中,若不及时处理,会降低 etcd 存储性能,影响平台整体使用。

针对该问题,平台提供了完善的清理和归档机制,支持从 etcd 中按需清理执行记录,或将执行记录归档到其他存储中,满足存储需求的同时也可平衡存储压力。

配置执行记录清理策略

此清理策略为通用配置,适用于各集群中的每一条流水线。此外,平台还支持流水线使用者在创建流水线时按需定义最多保留条数,该保留上限无法超过集群清理策略中的保留上限。

操作步骤

  1. 在左侧导航栏中,单击 集群管理 > 集群

  2. 单击 global 集群右侧的 > Kubectl 工具

  3. 按需创建清理策略。请按需修改带注释的参数,其余参数保持不变即可。

    注意

    • 持续发布的执行记录归档后,将不支持重试。

    • 示例中同时包含持续构建及持续发布的执行记录配置,请按需修改。

    cat << EOF | kubectl create -f -
    apiVersion: storage.katanomi.dev/v1alpha1
    kind: ClusterPolicy
    metadata:
      name: builds-etcd-policy
    spec:
      controller: etcd-builds
      enabled: true
      rules:
        - type: etcdPipelineRetainMax
          value: "10"  # 每条构建流水线在 etcd 中的执行记录最大保留条数。如果不配置,创建流水线时可配置保留任意条执行记录
        - type: etcdPipelineRetainDefault
          value: "2"  # 每条构建流水线在 etcd 中的执行记录默认保留条数。如果不配置,表示不限制
    ---
    apiVersion: storage.katanomi.dev/v1alpha1
    kind: ClusterPolicy
    metadata:
      name: deliveries-etcd-policy
    spec:
      controller: etcd-deliveries
      enabled: true
      rules:
        - type: etcdPipelineRetainMax
          value: "10" #  每条发布流水线在 etcd 中的执行记录最大保留条数。如果不配置,创建流水线时可配置保留任意条执行记
        - type: etcdPipelineRetainDefault
          value: "10"    # 每条构建流水线在 etcd 中的执行记录默认保留条数。如果不配置,表示不限制
    EOF

配置归档策略

统一设置归档策略,并应用于每一条持续构建或持续发布流水线。

前提条件

执行记录归档

当满足归档条件时,平台将在指定数据库中存储执行记录。您可在被归档的执行记录详情页看到 Archived 标识。归档后的记录显示内容与归档前无差异。

注意:对于持续发布流水线,如果执行记录已被归档,您将无法在该记录中进行重试。

操作步骤

  1. 在左侧导航栏中,单击 集群管理 > 集群

  2. 单击 global 集群右侧的 > Kubectl 工具

  3. 为持续构建和持续发布创建执行记录归档策略,且最多各创建一条策略。

    说明:请按需修改带注释的参数,其余参数保持不变即可。

    • 持续构建归档策略

      cat << EOF | kubectl create -f -
      # 创建存储插件
      apiVersion: storage.katanomi.dev/v1alpha1
      kind: StoragePlugin
      metadata:
        name: builds-archive-mysql  # 存储插件名称
      spec:
        storagePluginClassName: "db"
        params:
          - name: endpoint
            value: 192.168.100.100:30000  # MySQL 实例的访问地址,此处以集群外访问地址为例
          - name: secret
            value: mysql-secret-ns/mysql-secret  # MySQL 的 Secret 信息。格式为Secret 所在命名空间/Secret 名称,且需与后续创建的 Secret 对应值保持一致
          - name: version
            value: 8.0
          - name: database
            value: db-devops-archive-builds # 待使用的数据库名称,需提前创建好
          - name: dbType
            value: mysql
      ---
      # 创建 Secret
      apiVersion: v1
      data:
        password: UjdDQkQwR3BWUjV1R1liUg==  # 数据库用户密码的 base64 编码值
        username: cm9vdA==     # 数据库用户名的 base64 编码值
      kind: Secret
      metadata:
        name: mysql-secret # 在 global 集群创建一个 Secret,用于存储 MySQL 的访问信息。此为 Secret 的名称
        namespace: mysql-secret-ns # Secret 所属命名空间
      type: kubernetes.io/basic-auth
      ---
      # 创建归档策略
      apiVersion: storage.katanomi.dev/v1alpha1
      kind: ClusterPolicy
      metadata:
        name: builds-archive-policy
      spec:
        controller: archive-builds
        enabled: true
        rules:
          - type: storageCleanupDelayTime
            value: 90d  # 执行记录在 MySQL 中的保留天数。单位参考 https://github.com/k1LoW/duration#supported-unit-of-time
          - type: branchRetainCount
            value: "500" # 至少保留的执行记录条数
            regex: (^release-) # 待应用此归档策略的分支,用正则表达式表示
          - type: mainBranchRetainCount
            value: "2000" # 对于单条构建流水线主分支,至少保留的执行记录条数
          - type: protectBranchRetainCount
            value: "500" # 对于单条构建流水线保护分支,至少保留的执行记录条数
        storagePluginRef:
          name: builds-archive-mysql # 数据库插件名称,即前述 StoragePlugin 的名称
      EOF
    • 持续发布归档策略

      说明:如果已创建 持续构建归档策略 ,以下示例中的 MySQL 的 Secret 信息需与持续构建归档策略中创建的 Secret 对应值保持一致。如果不曾创建任何归档策略,请将持续构建归档策略 YAML 示例的“创建 Secret”部分添加到下述示例中。

      cat << EOF | kubectl create -f -
      # 创建存储插件
      apiVersion: storage.katanomi.dev/v1alpha1
      kind: StoragePlugin
      metadata:
        name: deliveries-archive-mysql  # 存储插件名称
      spec:
        storagePluginClassName: "db"
        params:
          - name: endpoint
            value: 192.168.100.100:30000  # MySQL 实例的访问地址,此处以集群外访问地址为例
          - name: secret
            value: mysql-secret-ns/mysql-secret  # MySQL 的 Secret 信息。格式为Secret 所在命名空间/Secret 名称
          - name: version
            value: 8.0
          - name: database
            value: devops-archive-deliveries # 待使用的数据库名称,需提前创建好
          - name: dbType
            value: mysql
      ---
      # 创建归档策略
      apiVersion: storage.katanomi.dev/v1alpha1
      kind: ClusterPolicy
      metadata:
        name: deliveries-archive-policy
      spec:
        controller: archive-deliveries
        enabled: true
        rules:
          - type: storageCleanupDelayTime
            value: 90d # 执行记录在 MySQL 中的保留天数。单位参考 https://github.com/k1LoW/duration#supported-unit-of-time
        storagePluginRef:
          name: deliveries-archive-mysql  # 存储插件名称,即前述 StoragePlugin 的名称
      EOF
  4. 验证配置是否生效。

    若步骤 3 中创建的 storageplugin 均为 ready 状态,说明配置已生效。

    kubectl get storageplugin

测试报告归档

当满足归档条件时,平台将在指定数据库中存储测试报告。您可在被归档的执行记录详情页看到 Archived 标识,以及详细的测试报告,例如:用例执行详情。

操作步骤

  1. 在左侧导航栏中,单击 集群管理 > 集群

  2. 单击 global 集群右侧的 > Kubectl 工具

  3. 创建测试报告归档策略。

    示例中同时包含持续构建及持续发布的执行记录配置,请按需修改。

    cat << EOF | kubectl create -f -
    apiVersion: storage.katanomi.dev/v1alpha1
    kind: StoragePlugin
    metadata:
      name: minio  # 存储插件名称
    spec:
      storagePluginClassName: "minio"
      params:
        - name: endpoint
          value: http://192.168.300.300:30000  #  MinIO 服务的地址
        - name: secret
          value: minio-secret-ns/minio-secret  # 在 global 集群创建一个 Secret,用于存储 MinIO 的访问信息。格式为 Secret 所在命名空间/secret 名称
        - name: bucket
          value: devops # 待使用的桶名称,需提前创建好
    ---
    apiVersion: v1
    data:
      password: UjdDQkQwR3BWUjV1R1liUg==  # MinIO 用户密码的 base64 编码值
      username: cm9vdA==     # MinIO 用户名的 base64 编码
    kind: Secret
    metadata:
      name: minio-secret
      namespace: minio-secret-ns
    type: kubernetes.io/basic-auth
    ---
    apiVersion: storage.katanomi.dev/v1alpha1
    kind: ClusterPolicy
    metadata:
      name: report-builds-policy # 归档策略名称
    spec:
      controller: report-builds
      enabled: true
      storagePluginRef:
        name: minio # 存储插件名称,即前述 StoragePlugin 的名称
      rules:
      - type: storageCleanupDelayTime
        value: 90d # 测试报告在 MinIO 中的保留天数。单位参考 https://github.com/k1LoW/duration#supported-unit-of-time
    ---
    apiVersion: storage.katanomi.dev/v1alpha1
    kind: ClusterPolicy
    metadata:
      name: report-deliveries-policy
    spec:
      controller: report-deliveries
      enabled: true
      storagePluginRef:
        name: minio # 存储插件名称,即前述 StoragePlugin 的名称
      rules:
      - type: storageCleanupDelayTime
        value: 90d # 测试报告保留天数,单位参考 https://github.com/k1LoW/duration#supported-unit-of-time
    EOF