如何在智能告警平台CA触发测试告警
1059
2022-10-15
DEVOPS系统自动化部署操作手册V3.0 for centos8
Devops系统自动化
部署操作手册
for centos8
系统运维操作手册
(v3.0)
2020年11月24日
作者:荪隆
南京迈特望科技股份有限公司
1 背景介绍
在现有环境使用了gitlab作为代码管理工具,并在上面集成了CI/CD自动化部署流程。在自动化流程过程中,全部使用docker容器进行打包、部署等。docker集群是使用swarm集群。现阶段需要在cicd流程中增加自动化测试。在整个流程中需要增加有:单元测试测试代码覆盖率;sonar代码质量扫描;增加接口自动化测试。在这些过程中,如有问题,则终止整个流程运行。需要满足Java和python项目的自动化测试。
2 环境部署
2.1 准备工作
默认bridge网络内的容器无法解析对方容器的host,通过新建一个docker网络devops_net,所有的相关的组件使用同一个网络。
# 创建docker network
docker network create devops_net
# 创建各容器所需目录
mkdir -p data/docker-volume
cd data/docker-volume
mkdir postgres
mkdir -p sonarqube/{data,extensions,logs}
mkdir -p gitlab/{config,logs,data}
mkdir -p gitlab-runner/config
#修改sonarqube内部用户uid/gid权限,
chown -R 999.999 sonarqube
2.2 部署postgres数据库
启动postgres,并为sonarqube创建一个数据库。sonarqube数据库需要使用字符编码为UTF8,postgres默认创建的则为UTF8。
# 启动postgres容器
docker run -d --name postgres --net=devops_net \
-e POSTGRES_PASSWORD=pgpasswd \
-v data/docker-volume/postgres:/var/lib/postgresql/data \
postgres:12
# 创建sonarqube数据库
docker exec -it postgres psql -U postgres
> create database sonarqube;
> \l # 列出所有数据库
> \q # 退出
2.3 部署sonarqube
创建sonarqube容器,需要指定postgresql数据库,且指定连接串对应的数据库postgres的账号和密码。
docker run -d --name sonarqube --net=devops_net \
-p 9000:9000 \
-e SONAR_JDBC_URL=jdbc:postgresql://postgres/sonarqube \
-e SONAR_JDBC_USERNAME=postgres \
-e SONAR_JDBC_PASSWORD=pgpasswd \
-v data/docker-volume/sonarqube/data:/opt/sonarqube/data \
-v data/docker-volume/sonarqube/extensions:/opt/sonarqube/extensions \
-v /data/docker-volume/sonarqube/logs:/opt/sonarqube/logs \
sonarqube:8-community
说明:sonarqube容器启动时,若出现无法连接数据库问题,则很大程度上是连接到数据库的网络或账号问题,先确认sonarqube容器所在的网络能否连接到postgres这个名称的主机,再确认postgres中是否有sonarqube数据库。
2.4 部署gitlab代码仓库
由于gitlab镜像比较大,其中包含了postgres,redis,nginx,gitlab等多个组件,启动、初始化配置等时间也比较长,启动时间大约需要5-10分钟左右,具体根据机器配置,需要耐心等待观察日志启动完成即可访问。
docker run -d --name gitlab --net=devops_net \
-p 443:443 -p 80:80 -p 2222:22 \
--hostname 192.168.56.115 \
--restart always \
--volume /data/docker-volume/gitlab/config:/etc/gitlab \
--volume /data/docker-volume/gitlab/logs:/var/log/gitlab \
--volume /data/docker-volume/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
2.5 部署gitlab-runner
gitlab-ci是gitlab的持续集成服务,gitlab-runner用于运行gitlab-ci的任务。
gitlab-runner支持很多种运行任务的方式(称为Executors),目前支持:SSH、Shell、Parallels、VirtualBox、Docker、Docker Machine(auto-scaling)、Kubernetes、Custom。本文选用Docker方式。
docker run -d --name gitlab-runner --net=project1_net \
--restart always \
-v /data/docker-volume/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
2.6 注册Gitlab-runner
访问gitlab地址查看gitlab_runner注册信息 http://192.168.56.115,默认进去会提示重置密码。如果密码不法访问可以用如下命令来重置gitlab密码
docker exec -it gitlab bash
gitlab-rails console production
user = User.where(id: 1).first
user.password = '1qaz@WSX'
user.save!
注册gitlab-runner。
登录gitlab平台后,找到管理员 -> 概览 -> Runners
将上图git地址和token更新到下面的脚本中
docker exec -it gitlab-runner gitlab-runner register -n \
--url http://192.168.56.115 \
--registration-token sXBPZnfHpb34qzssBFAs \
--executor docker \
--description "Docker Runner" \
--docker-image "sonarsource/sonar-scanner-cli:latest" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
3 Gitlab与sonarqube整合
3.1 配置gitlab OAuth
登录Gitlab后,找到管理员 -> 设置-> CI/CD -> 展开-> Default to Auto DevOps pipeline for all projects选项去掉并记得保存。
设置Gitlab OAuth:管理-> 应用-> 新建应用
最后记住保存好Application ID和Secret
3.2 配置sonarqube ALM Integrations
1、配置sonarqube
登录sonarqube,通用设置中配置好Server base URL,此地址必须和Gitlab Redirect URI(回调地址)的协议+主机域名(或IP)是一致的,或者先在这里配置好之后再去配置或修改Gitlab Redirect URI。
2、配置ALM Integrations
配置 -> 通用配置 -> ALM Integrations -> Gitlab
Enabled:启用。
GitLab URL:Gitlab地址。
Application ID:在Gitlab applications中创建的application id。
Secret:在Gitlab applications中创建的application Secret。
其他选项根据需求勾选。
3、创建sonar project,生成sanner的token
4、创建gitlab project
1)、新建project,然后将代码上传到gitlab
配置CI/CD流水线
2)、如下配置是gitlab-ci.yml配置,配置需要跟sonarqube对接上。
stages:
#pre maven编译
- pre_build_maven
pre_job_maven:
image: maven:3.6.3-jdk-8
variables:
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
stage: pre_build_maven
script:
- source /etc/profile
- mvn $MAVEN_CLI_OPTS compile sonar:sonar -Dsonar.host.url=http://192.168.56.115:9000 -Dsonar.login=f922ba20e1f4d8659023c4080639dd53049c3ea9 -Dsonar.language=java -Dsonar.exclusions=**/target/** -Dsonar.java.binaries=.
- mvn $MAVEN_CLI_OPTS test
- mvn clean test && cat target/site/jacoco/index.html
- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true sonar:sonar -Dsonar.host.url=http://192.168.56.115:9000 -Dsonar.login=f922ba20e1f4d8659023c4080639dd53049c3ea9
#- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install sonar:sonar -Dmaven.test.failure.ignore=true -Dsonar.host.url=http://192.168.56.115:9000 -Dsonar.login=f922ba20e1f4d8659023c4080639dd53049c3ea9
# - mvn sonar:sonar -X -Dsonar.projectKey=zentao-prg -Dsonar.host.url=http://192.168.56.115:9000 -Dsonar.login=f922ba20e1f4d8659023c4080639dd53049c3ea9 -Dsonar.login=admin -Dsonar.password=1qaz@WSX -Dsonar.language=java -Dsonar.java.binaries=src/ -Dsonar.projectVersion=1.0 -Dsonar.sources=. -Dsonar.exclusions=**/*test*/**
only:
- merge_requests
- main
3)、java项目采用jacoco插件来实现代码覆盖率测试。
在java项目pom.xml配置文件新增如下jacoco拆件配置,配置修改完后会自动构建。
org.springframework.boot
spring-boot-maven-plugin
org.jacoco
jacoco-maven-plugin
0.8.4
target/coverage-reports/jacoco-unit.exec
target/coverage-reports/jacoco-unit.exec
**
**/service/impl/*.class-->
BUNDLE
METHOD
COVEREDRATIO
0.50
BRANCH
COVEREDRATIO
0.50
CLASS
MISSEDCOUNT
0
jacoco-initialize
prepare-agent
jacoco-site
test
report
3.3 代码质量检查与覆盖率验证
构建完代码后,可以观察GITLAB上面的流水线是否构建成功。
构建成功后登录sonarqube查看代码质检结果与代码覆盖率
3.4 Gitlab上的readme显示单元测试覆盖率
登录gitlab,选择项目》设置》CI/CI》流水线通用设置,然后展开,在测试覆盖率解析中输入
Total.*?([0-9]{1,3})%
然后在项目中readme文件中添加如下内容
[![coverage report](http://192.168.56.115/root/zentao-prg/badges/main/coverage.svg)](http://192.168.56.115/root/zentao-prg/-/commits/main)
构建完成结果会存呈现覆盖率结果:
发表评论
暂时没有评论,来抢沙发吧~