提供的服务及相关能力:
- 项目CI和工作流自动化工具:prow、tide;
- 支持规划化项目CI的基础设施:boskos、ghproxy、greenhouse;
- 测试工件的提取、展示和分析: gubernator、kettle、testgrid、triage;
- 任务配置管理并确保它们使用一致的流程:job configs、kubetest;
- 方便github的配置管理:peribolos、label_sync;
- 方便k8s本地测试:greenhouse、kind;
k8s测试基础设施(test-infra)的主要项目清单:
从PR触发测试执行的完整流程:
一、自动化
prow
用途:基于k8s的CI/CD系统。
主要的组件清单及功能:
- Crier: 用于报告prowjobs的状态,现在已有的reporter:Gerrit reporter、Pubsub reporter、GitHub reporter、Slack reporter,当然你也可以扩展reporter;
- Deck: 在prow页面上展示正在运行或最近运行的jobs;
- prow-controller-manager:管理在k8s中运行的作业执行和生命周期;
- Tide:管理Github的PR,可以对PR进行合并;
- Horologium: 创建周期性任务;
- Sinker: TBD;
prow status汇总信息图如下所示: Prow Status
kubetest1/2
用途: kubetest是一个部署k8s集群并能运行端到端测试,kubetest已经被kubetest2替代。详细文档
k8s中的e2e测试建立在Ginkgo和Gomega之上,该行为驱动开发测试框架(BDD)提供了很多特性。
构建k8s、启动cluster、执行测试、清理所有资源,可以使用这些命令:
# 构建k8s
kubetest2 gce --build --legacy-mode
# 执行测试
kubetest2 gce --gcp-project <project> --up
kubetest2 gce --test ginkgo -- --focus-regex "\[Feature:Performance\]"
# 清理
kubetest2 gce --gcp-project <project> --down
一个nodepool e2e测试用例,具体测试代码块,如下所示:
var _ = SIGDescribe("GKE node pools [Feature:GKENodePool]", func() {
f := framework.NewDefaultFramework("node-pools")
f.NamespacePodSecurityEnforceLevel = admissionapi.LevelPrivileged
ginkgo.BeforeEach(func() {
e2eskipper.SkipUnlessProviderIs("gke")
})
ginkgo.It("should create a cluster with multiple node pools [Feature:GKENodePool]", func(ctx context.Context) {
framework.Logf("Start create node pool test")
testCreateDeleteNodePool(ctx, f, "test-pool")
})
})
个人遗留问题,TBD:这里的实际用例执行为什么用的是命令行去触发?是用户接触的是命令行模式?还是其他什么原因?
boskos
用途:资源管理服务,为测试提供干净的GCP项目或者k8s集群。 Boskos支持两种资源类型:静态资源、动态资源。
---
resources:
# Static
- type: "aws-account"
state: free
names:
- "account1"
- "account2"
# Dynamic
- type: "aws-cluster"
state: dirty
min-count: 1
max-count: 2
lifespan: 48h
needs:
aws-account: 1
config:
type: AWSClusterCreator
content: "..."
gopherage
用途:go覆盖率工具,并且可以转换为testgrid兼容的junit。
二、可视化
testgrid
用途:用于在网格中查看测试结果。
k8s的testgrid实例可以查看此链接,现在主要的代码都归档于GCP group中。
呈现的结果图如下所示:
三、本地测试
kind
TBD