设置构建/发布流水线存储策略
在日常功能迭代过程中,项目人员使用流水线对业务进行自动化处理时,将生成大量流水线执行记录和测试报告。执行记录和测试报告均保存在平台组件 etcd 中,若不及时处理,会降低 etcd 存储性能,影响平台整体使用。
针对该问题,平台提供了完善的清理和归档机制,支持从 etcd 中按需清理执行记录,或将执行记录归档到其他存储中,满足存储需求的同时也可平衡存储压力。
配置执行记录清理策略
此清理策略为通用配置,适用于各集群中的每一条流水线。此外,平台还支持流水线使用者在创建流水线时按需定义最多保留条数,该保留上限无法超过集群清理策略中的保留上限。
操作步骤
-
在左侧导航栏中,单击 集群管理 > 集群。
-
单击 global 集群右侧的
> Kubectl 工具。
-
按需创建清理策略。请按需修改带注释的参数,其余参数保持不变即可。
注意:
-
持续发布的执行记录归档后,将不支持重试。
-
示例中同时包含持续构建及持续发布的执行记录配置,请按需修改。
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
-
配置归档策略
统一设置归档策略,并应用于每一条持续构建或持续发布流水线。
前提条件
-
请先准备存储实例,且确保 global 集群,以及运行流水线的集群可正常访问存储。
-
用于归档执行记录:使用关系型数据库 MySQL 8.0 或 ProgreSQL 12。且支持通过 数据服务 部署。
-
用于归档测试报告:使用对象存储 MinIO 。
-
-
存储实例各部署一个即可。存储中需至少有一个数据库/存储桶,每个数据库/存储桶可认为是一个存储插件(StoragePlugin)。支持通过存储中的不同存储插件来分别存储数据。
说明:对于 MySQL ,本节内容以使用两个数据库( db-devops-archive-builds 和 devops-archive-deliveries )为例。
-
存储插件使用的存储类可以跟持续构建默认存储类一致,也可单独指定。
执行记录归档
当满足归档条件时,平台将在指定数据库中存储执行记录。您可在被归档的执行记录详情页看到 Archived 标识。归档后的记录显示内容与归档前无差异。
注意:对于持续发布流水线,如果执行记录已被归档,您将无法在该记录中进行重试。
操作步骤
-
在左侧导航栏中,单击 集群管理 > 集群。
-
单击 global 集群右侧的
> Kubectl 工具。
-
为持续构建和持续发布创建执行记录归档策略,且最多各创建一条策略。
说明:请按需修改带注释的参数,其余参数保持不变即可。
-
持续构建归档策略
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
-
-
验证配置是否生效。
若步骤 3 中创建的 storageplugin 均为
ready
状态,说明配置已生效。kubectl get storageplugin
测试报告归档
当满足归档条件时,平台将在指定数据库中存储测试报告。您可在被归档的执行记录详情页看到 Archived 标识,以及详细的测试报告,例如:用例执行详情。
操作步骤
-
在左侧导航栏中,单击 集群管理 > 集群。
-
单击 global 集群右侧的
> Kubectl 工具。
-
创建测试报告归档策略。
示例中同时包含持续构建及持续发布的执行记录配置,请按需修改。
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