借着公司代码库迁移到私有Gitlab的契机,我接下持续集成的工作,实现了对Python服务端代码的单元测试、静态代码分析和接口测试的持续集成。总体架构如下:
架构图
执行过程:
-
开发提交代码后,自动触发gitlab-runner拉取executor镜像执行单元测试,单元测试代码中包含上传测试结果到x-utest测试平台;
-
单元测试通过后,gitlab-runner拉取sonar-scanner镜像执行静态代码分析,分析结果评论在commit中或保存于sonarqube;
-
静态代码分析结束,执行分发操作,将代码分发至灰度测试服务器,并运行;
-
执行接口测试,执行完成后上传测试结果到x-utest测试平台。
四个任务相互依赖,只在前一个任务状态为成功情况下才会执行。
本文主要描述一些技术实现,会适当贴出代码,可能能为相关从业者提供灵感与解决方案,不保证每个细节都深入讲解。
Gitlab CI 基本配置
针对某个需要做CI/CD的项目,需要将代码库的该设置打开,并为其配置 gitlab-runner。
gitlab runner
gitlab-runner不仅可以运行在物理机,还可以运行在容器中。考虑到gitlab-runner消耗的资源少,使用容器更合适。
拉取gitlab-runner Docker 镜像:
sudo docker pull gitlab/gitlab-runner
启动容器:
sudo docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
在容器中执行register操作,将gitlab上的项目注册到gitlab-runner中ÿ