何为DevOps和测试左移?
DevOps是一种将开发(Development)和运维(Operations)紧密结合的文化和实践方法。其核心理念是通过流程自动化、协作和持续反馈,提升软件的开发效率和质量,使得软件交付变得更加快速、可靠和高效。
测试左移(Shift Left Testing)是一种将测试活动尽早引入开发流程的方法。传统的测试通常在开发完成后才开始进行,而测试左移主张在需求分析、设计和编码阶段就积极参与测试,尽早发现并解决缺陷,从而降低修复成本,提高软件质量。
DevOps的核心在于提高开发与运维之间的协作,而测试左移则强调在开发早期阶段尽早引入测试,二者共同致力于提高软件的质量和交付速度。
代码评审
让测试人员参与代码评审是一种测试左移的有效方式。通过充分利用测试人员的专业知识,团队可以在早期阶段发现并解决问题,从而减少后期的维护成本,提升产品的整体质量。
目前很多公司都在推行DevOps和测试前移,以便让测试人员更早地参与研发过程。尽管许多团队开始让测试人员参与代码评审,但结果往往不如预期。这通常是因为测试人员的编码能力有限,对业务代码逻辑不够熟悉,导致他们难以准确识别问题。这使得测试团队的代码评审变得形式化。那么,有什么方法可以改善这种情况呢?如果测试人员在进行代码评审时能利用一些代码扫描工具,并对扫描结果进行深入分析,就能更轻松地发现真正的代码问题。
SonarQube
SonarQube 是一个开源的代码质量管理平台,用于持续检查代码质量和安全性。它支持多种编程语言,提供详细的代码质量指标,如代码覆盖率、技术债务、代码复杂度和潜在安全漏洞。通过静态代码分析,SonarQube帮助开发团队发现并修复代码中的问题,从而提升软件的可维护性和可靠性。
- 多语言支持:支持Java、C#、JavaScript、Python等多种编程语言。
- 静态代码分析:自动检测代码中的错误、警告和不符合最佳实践的部分。
- 集成与自动化:可以与CI/CD工具(如Jenkins、GitLab等)无缝集成,实现自动化代码分析。
- 用户友好的界面:提供直观的Web界面,方便查看代码质量报告和趋势。
环境搭建
环境说明:
- Linux系统:CentOS 7.9
- 内存:建议8GB或以上
1. 安装Docker
# yum更新
yum -y update
# 移除旧版本的Docker(如果有)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装Docker的依赖包
yum install -y yum-utils
# 设置Docker的稳定仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker(社区版
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动Docker服务
systemctl start docker
# 查看Docker服务状态
systemctl status docker
状态running说明运行正常:
配置Docker国内镜像源
使用Docker镜像库时,由于网络原因,直接访问Docker Hub可能会较慢。为了提高拉取镜像的速度,你可以使用国内的Docker镜像库服务,比如阿里云、腾讯云、网易云等。
vi /etc/docker/daemon.json
添加以下镜像配置:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
# 重启Docker服务
systemctl daemon-reload
systemctl restart docker
创建Docker网络
由于是将所有的服务都部署在同一台主机上面,并且使用Docker的方式,为了方便Jenkins、Gitlab、SonarQube服务之间的相互访问,使用以下命令创建Docker网络,这样访问服务的时候可以通过容器名直接访问:
docker network create devops-network
2. 部署SonarQube
在SonarQube 8版本之后提供了非常好用的功能,其中包括多分支代码扫描,所以这里我们使用 SonarQube V9.9 LTS版本
需要注意的是自 SonarQube 7.9 LTS 版本起,MySQL 不再受 SonarQube 官方支持,其所支持的数据库包括H2(内嵌数据库,主要用于开发和测试环境)、PostgreSQL,这里我们使用PostgreSQL数据库。选择如下:SonarQube V9.9 + PostgreSQL V12
使用docker compose方式部署,对应docker-compose.yaml配置如下:
networks:
devops-network:
external: true # 表示这个网络是外部创建的
services:
sonarqube:
image: sonarqube:9.9-community
container_name: sonarqube
depends_on:
- db
ports:
- "9000:9000" # SonarQube 的默认端口
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarqube
SONAR_JDBC_USERNAME: sonarqube
SONAR_JDBC_PASSWORD: sonarqube
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_extensions:/opt/sonarqube/extensions
networks:
- devops-network
db:
image: postgres:12
container_name: sonarqube_db
environment:
POSTGRES_USER: sonarqube
POSTGRES_PASSWORD: sonarqube
POSTGRES_DB: sonarqube
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
networks:
- devops-network
volumes:
sonarqube_conf:
sonarqube_data:
sonarqube_logs:
sonarqube_extensions:
postgresql:
postgresql_data:
使用docker compose启动
docker compose -f docker-compose.yaml up -d
访问http://你的主机IP:9000
即可看到SonarQube登录页面,默认账号密码为admin/admin
SonarQube汉化
默认SonarQube使用英文页面,不支持中文,我们需要额外安装支持中文的插件:https://github.com/xuhuisheng/sonar-l10n-zh
寻找匹配的版本:
将下载好的插件存放到/var/lib/docker/volumes/opt_sonarqube_extensions/_data/plugins
目录下
重启服务:
docker compose down
docker compose -f docker-compose.yaml up -d
创建SonarQube项目并生成token
为了让后续Jenkins能够联动SonarQube,在个人账户中创建token,记住token值(该token只会显示一次)
3. 部署Gitlab
使用以下Docker命令部署Gitlab并运行容器
docker run --name gitlab \
--hostname gitlab.test.com \
-p 443:443 -p 80:80 -p 222:22 \
--restart always \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/data:/var/opt/gitlab \
--net=devops-network \
-d gitlab/gitlab-ce:latest
获取Gitlab root用户初始化密码:
docker exec -it gitlab grep "Password:" /etc/gitlab/initial_root_password
访问http://你的主机IP
即可看到Gitlab登录页面,以root用户登录:
创建新用户并新建仓库
添加新用户:
以新用户账号重新登录Gitlab,并且将本地Git密钥添加到该账号中(Git密钥需要在本地使用命令生成,不会的自行百度搜索)
新建仓库,并且将需要进行扫描的代码推送到新仓库中
4. 部署Jenkins
docker run --name jenkins \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
--net=devops-network \
-d jenkins/jenkins:2.462.2-jdk11
拉取Jenkins镜像时需要注意,镜像内置的JDK版本最好是11,如果是17后面使用Sonar进行代码扫描时JDK版本会不匹配
访问http://你的主机IP:8080
即可看到Jenkins页面,按照页面提示进行初始化
下载SonarQube插件
在系统管理->插件管理页面搜索下载:SonarQube Scanner for Jenkins
配置SonarQube server
系统管理->找到SonarQube servers,设置名称和SonarQube服务的地址,这里可以直接用sonarqube作为主机名去连接(之前有使用Docker 网络)
添加凭据,这里的Secret是上述SonarQube中生成的token
配置SonarQube Scanner
系统管理->全局工具配置->找到SonarQube Scanner,这里选择在线安装Sonar Scanner方式
配置maven
系统管理->全局工具配置->找到Maven,这里同样选择在线安装方式
sonar-scanner扫描配置
在被扫描项目中添加sonar-project.properties文件,配置如下(以Java项目为例):
# 项目标识
sonar.projectKey=scan_backend_springboot
# 默认和项目标识保持一致
sonar.projectName=scan_backend_springboot
# 项目版本号
sonar.projectVersion=1.0
# 项目扫描路径,默认.代表当前目录下所有的代码文件
sonar.sources=.
# 指定java项目JDK版本
sonar.java.source=1.8
sonar.java.target=1.8
# 指向包含与源文件对应的已编译字节码文件的目录
sonar.java.binaries=target/classes
# 源码编码格式
sonar.sourceEncoding=UTF-8
Jenkins任务配置
添加被扫描项目Git仓库地址、凭据信息
构建Java项目,填写如下构建选项:
clean dependency:copy-dependencies verify
clean
用于清除上一次构建的信息dependency:copy-dependencies
用于将项目的第三方依赖拷贝到target目录下,对于Java项目SonarQube需要该信息以保证分析代码时结果更精准verify
阶段是 Maven 中用于质量检查的阶段,确保项目符合预设的质量标准,在此阶段会生成覆盖率报告
Jenkins构建任务完之后
欢迎来到testingpai.com!
注册 关于