DEVOPS系统自动化部署操作手册V3.0 for centos8

网友投稿 1059 2022-10-15

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

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)

构建完成结果会存呈现覆盖率结果:

上一篇:PostgreSQL等待事件原理简析
下一篇:运维监控系统对比
相关文章

 发表评论

暂时没有评论,来抢沙发吧~