【Docker安装Gitlab管理项目代码并整合Sonarqube分析代码质量】

一、前言

1.GitLab
开放式一体化安全DevOps平台,集成了项目管理,CI/CD,安全以及配置监控,软件研发全生命周期的 DevOps 能力,是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。
2.GitLab-CI
GitLab-CI就是一套配合GitLab使用的持续集成系统(当然,还有其它的持续集成系统,同样可以配合GitLab使用,比如Jenkins,而且GitLab8.0以后的版本是默认集成了GitLab-CI并且默认启用的)。
3.GitLab-Runner
GitLab-Runner是配合GitLab-CI进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本,所以GitLab-Runner就是一个用来执行软件集成脚本的东西。你可以想象一下:Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的,当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。
4.Sonarqube
SonarQube是管理代码质量的一个开放平台,可以快速定位代码中潜在的或者明显的错误。支持Java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等二十几种编程语言的代码质量管理与检测。

二、准备工作

因为本文介绍的是基于docker安gitlab、gitlab-runner、sonarqube、postgres等镜像,所以先决条件是系统必须先安装好docker才能往下走,如果对docker的安装还不熟悉的可以查看我的另一篇文章【Linux安装最新版Docker完整教程】,安装完之后再往下看。

三、安装Gitlab

3.1 Docker安装最新版Gitlab

#新建gitlab文件目录
mkdir -p /mnt/gitlab/{
    
    config,logs,data}
#拉取最新版本gitlab-ce镜像
docker pull gitlab/gitlab-ce
#启动容器
docker run -d --name gitlab --restart=always --privileged=true \
-p 443:443 -p 6001:6001 -p 2222:22 \
-v /mnt/gitlab/config:/etc/gitlab \
-v /mnt/gitlab/logs:/var/log/gitlab \
-v /mnt/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce

#修改gitlab.rb(如果gitlab页面访问地址和clone地址一致,可以直接使用external_url,而不必开启nginx['listen_addresses']和nginx['listen_port'])
vim /mnt/gitlab/config/gitlab.rb
{
    
    
# git clone地址,不加端口号默认为80
external_url 'http://192.168.0.132:6001'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.0.132'
gitlab_rails['gitlab_shell_ssh_port'] = 2222 # 此端口是run时22端口映射的2222端口
# nginx监听地址(gitlab页面访问地址)
nginx['listen_addresses'] = ['*', '[::]']
# 容器内部nginx的监听端口
nginx['listen_port'] = 6001
}
#保存配置文件并退出
:wq
#重启gitlab容器
docker restart gitlab
#进入gitlab容器修改管理员密码
docker exec -it gitlab /bin/bash
#启动Ruby on Rails控制台
gitlab-rails console -e production
#等待控制台加载完毕,搜索电子邮件或用户名
user = User.where(id:1).first
#或者
user = User.find_by(email:'[email protected]')
#修改密码(密码不能包含常用的单词和字母组合)
user.password ='hello@2023'
user.password_confirmation ='hello@2023'
#保存
user.save!
#退出控制台
exit
#退出容器
exit

在这里插入图片描述

3.2 访问Gitlab登录页面: http://192.168.0.132:6001

1.管理员账号:[email protected]
2.密码:hello@2023
在这里插入图片描述
在这里插入图片描述
3.创建gitlab测试项目
在这里插入图片描述
4.查看项目地址和token(后面注册Runner时需要用到):Settings—>CI/CD—>Runner—>Project runners
在这里插入图片描述

5.Idea搭建SpringBoot测试项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.初始化项目仓库并提交代码到Gitlab(刚才创建的main分支是受保护的,所以我们需要创建master分支再提交)

#打开上面Idea搭建的test-sonar项目目录
cd D:\xxx\test-sonar
#初始化git仓库
git init
#添加文件
git add .
#提交代码
git commit -m 'first commit'
#关联远程仓库
git remote add origin http://192.168.0.132:6001/gitlab-instance-096449c7/test-sonar.git
#切换到master分支
git checkout -b master
#推送代码到远程master分支
git push -uf origin master

在这里插入图片描述

四、安装GitLab-Runner

4.1 Docker安装最新版GitLab-Runner

因为后面执行Job时可能需要用到mvn或者docker等命令,本文需要用到是mvn命令,所以虚拟机需要安装JDK和MAVEN环境,具体的操作需自行处理,不懂安装的可以查看我的另一篇文章【Docker安装Jenkins…】进行安装

#新建目录
mkdir -p /mnt/gitlab-runner/config
#拉取镜像
docker pull gitlab/gitlab-runner
#启动镜像
docker run -d --name gitlab-runner \
--net=host --restart always --privileged=true \
-v /mnt/gitlab-runner/config:/etc/gitlab-runner \
-v /usr/local/java/jdk-11:/usr/local/java/jdk-11 \
-v /usr/local/maven:/usr/local/maven \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner

# 进入容器
docker exec -it gitlab-runner /bin/bash
# 配置jdk11和maven3.8.6环境变量(容器没有vim命令的话就自行安装一下~)
vim /etc/profile
{
    
    
JAVA_HOME=/usr/local/java/jdk-11
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/lib
export JAVA_HOME CLASSPATH PATH
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
}
# 注册runner
gitlab-runner register
# gitlab地址
【Enter the GitLab instance URL (for example, https://gitlab.com/):】
http://192.168.0.132:6001/
# token
【Enter the registration token:】
GR1348941Q2F_Ya9BrF2V2tupxGet
# 输入runner描述
【Enter a description for the runner:】
test_sonar_runner
# gitlab-runner标签名称tag
【Enter tags for the runner (comma-separated):】
sonar
#gitlab-runner可选维护说明
【Enter optional maintenance note for the runner】
test_sonar
# 选择执行gitlab-runner的执行程序。
【Enter an executor: custom, docker-ssh, parallels, kubernetes, docker, shell, ssh, virtualbox, docker+machine, docker-ssh+machine:】
shell
# 如果选择docker作为执行程序,那要定义一个默认镜像的名称
【Enter the default Docker image (for example, ruby:2.6):】
test_sonar:latest

4.2 在Gitlab的测试项目里查看runner

在这里插入图片描述

4.3 流水线测试

4.3.1 在maven项目下新建.gitlab-ci.yml文件

stages:
  - build
  - test
  - deploy
build:
  stage: build
  tags:
    - sonar
  only:
    - master
  script:
    - echo "mvn clean "
    - echo "mvn install"
test:
  stage: test
  tags:
    - sonar
  only:
    - master
  script:
    - echo "hello test" 
deploy:
  stage: deploy
  tags:
    - sonar
  only:
    - master
  script:
    - echo "hello deploy"

4.3.2 提交文件到Gitlab上

在这里插入图片描述

4.3.3 观察CI/CD流水线

在这里插入图片描述

4.3.4 gitlab-ci.yml使用

1.什么是gitlab-ci.yml文件
将.gitlab-ci.yml文件添加到存储库的根目录,并将GitLab项目配置为使用Runner,则每次提交或推送都会触发CI 管道
2.参数说明

字段 描述
stages 定义流水线所有的阶段,如果未定义stages,则默认有build、test、deploy三个阶段
stage 定义一个作业阶段(默认值:)test
script 必须参数,由runner执行的shell脚本
image 使用Docker image镜像
services 使用Docker services镜像
before_script 执行作业之前执行的一段shell脚本
after_script 执行完作业之后执行的一段shell脚本
only 限制作业在什么时候创建
except 限制作业在什么时候不创建
tags 作用使用的Runner运行器的标签列表
allow_failure 允许作业失败,失败的作业不影响提交的状态
when 什么时候运行作业
environment 作用部署的环境名称
cache 指定需要在job之间缓存的文件或目录
artifacts 归档文件列表,指定成功后应附加到job的文件和目录的列表
dependencies 当前作业依赖的其他作业,你可以使用依赖作业的归档文件
coverage 作业的代码覆盖率
retry 作业失败时,可以自动执行多少次
parallel 指定并行运行的作业实例
trigger 定义下游流水线的触发器
include 作业加载其他YAML文件
extends 控制实体从哪里继承
pages 上传GitLab Pages的结果
variables 定义环境变量

4.3.4 gitlab-runner常用命令

#调试模式排查错误特别有用。
gitlab-runner --debug <command>
#获取帮助信息
gitlab-runner <command> --help 
#普通用户模式  配置文件位置 ~/.gitlab-runner/config.toml   
gitlab-runner run  
# 超级用户模式  配置文件位置/etc/gitlab-runner/config.toml     
sudo gitlab-runner run  
#注册
gitlab-runner register  
#列出所有运行程序
gitlab-runner list  
#检查注册的runner是否可以连接。    
gitlab-runner verify  
#删除  
gitlab-runner verify --delete 
#取消已注册的runner
gitlab-runner unregister   
#使用令牌注销
gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n
#使用名称注销(同名删除第一个)
gitlab-runner unregister --name test-runner
#注销所有
gitlab-runner unregister --all-runners
#停止运行并从服务中卸载GitLab Runner
gitlab-runner uninstall 
#启动GitLab Runner服务
gitlab-runner start     
#停止GitLab Runner服务
gitlab-runner stop      
#重启GitLab Runner服务
gitlab-runner restart   
#显示GitLab Runner服务的状态。当服务正在运行时,退出代码为零;而当服务未运行时,退出代码为非零
gitlab-runner status    

五、安装Sonarqube

5.1 Docker安装postgresql数据库

官网上已经声明 sonarQube 7.9 版本以上不再支持 mysql 了,所以我们使用 postgresql,
sonarqube:8.9.8-community版本postgreSQL数据的版本为:9–12。最高支持13版本。

#创建文件目录
mkdir -p /mnt/postgres/{
    
    postgresql,data}
#拉取镜像
docker pull postgres:12.4-alpine
#启动容器
docker run -d --name postgres -p 5432:5432 \
-v /mnt/postgres/postgresql:/var/lib/postgresql \
-v /mnt/postgres/data:/var/lib/postgresql/data \
-v /etc/localtime:/etc/localtime:ro \
-e POSTGRES_USER=sonar \
-e POSTGRES_PASSWORD=sonar \
-e POSTGRES_DB=sonar \
-e TZ=Asia/Shanghai \
--restart always \
--privileged=true \
postgres:12.4-alpine

5.2 Docker安装Sonarqube

#修改内核参数(否则后面容器启动会报错)
vim /etc/sysctl.conf
{
    
    
# 增加以下配置
vm.max_map_count=262144
fs.file-max=65536
}
# 使配置生效
sysctl -p
#创建文件目录
mkdir -p /mnts/sonarqube/{
    
    extensions,logs,data}
#拉取镜像
docker pull sonarqube:8.9.8-community
#启动容器
docker run -d --name sonarqube -p 9000:9000 \
--link postgres --restart always --privileged=true \
-v /mnt/sonarqube/extensions:/opt/sonarqube/extensions \
-v /mnt/sonarqube/logs:/opt/sonarqube/logs \
-v /mnt/sonarqube/data:/opt/sonarqube/data \
-e SONARQUBE_JDBC_URL=jdbc:postgresql://postgres:5432/sonar \
-e SONARQUBE_JDBC_USERNAME=sonar \
-e SONARQUBE_JDBC_PASSWORD=sonar \
sonarqube:8.9.8-community

参数说明:
–link 这个参数是postgresql数据库的容器名,后面的数据库地址需要采用该容器名进行连接
–restart always 容器跟随docker的启动而启动
–privileged=true 以特权方式启动容器,解决报错问题(Permission denied)

5.3 访问Sonarqube管理页面:http://192.168.0.132:9000

(默认账号:admin,密码:admin)
在这里插入图片描述
修改密码:sonar@123
在这里插入图片描述
在这里插入图片描述

5.4 Sonar安装中文插件

方式一:Administration->Marketplace->搜索chinese pack,进行相应版本的安装(如无法安装,则选择方式二),如下图
在这里插入图片描述
方式二:下载地址:https://github.com/xuhuisheng/sonar-l10n-zh/tags ,找到自己版本对应的中文包,将 jar 包放入 /mnt/sonarqube/extensions/plugins ,重启 sonarqube
在这里插入图片描述
在这里插入图片描述

六、SonarQube整合Gitlab

实现目标:代码通过gitlab提交后,sonarqube就会分析该代码质量

6.1 Sonar新建测试项目

1.登录sonarqube,新建项目
在这里插入图片描述
在这里插入图片描述
2.设置token
在这里插入图片描述
在这里插入图片描述

6.2 注册测试项目的gitlab-runner

# 进入容器
docker exec -it gitlab-runner /bin/bash
# 注册runner
gitlab-runner register
# gitlab地址
【Enter the GitLab instance URL (for example, https://gitlab.com/):】
http://192.168.0.132:6001/
# token
【Enter the registration token:】
GR1348941Q2F_Ya9BrF2V2tupxGet
# 输入runner描述
【Enter a description for the runner:】
test_sonar_runner
# gitlab-runner标签名称tag
【Enter tags for the runner (comma-separated):】
sonar
#gitlab-runner可选维护说明
【Enter optional maintenance note for the runner】
test_sonar
# 选择执行gitlab-runner的执行程序。
【Enter an executor: custom, docker-ssh, parallels, kubernetes, docker, shell, ssh, virtualbox, docker+machine, docker-ssh+machine:】
shell
# 如果选择docker作为执行程序,那要定义一个默认镜像的名称
【Enter the default Docker image (for example, ruby:2.6):】
test_sonar:latest

6.3 在测试项目下修改.gitlab-ci.yml文件

variables:
  SONAR_PROJECT_KEY: "test-sonar"
  SONAR_TOKEN: "b3575bc5f76697cad49ac33ead1ff076e3d79985"
  SONAR_HOST_URL: "http://192.168.0.132:9000"
stages:
  - test
sonar_preview:
  stage: test
  script:
    - mvn --batch-mode verify sonar:sonar -Dsonar.projectKey=$SONAR_PROJECT_KEY -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN
  only:
    - master
  tags:
    - sonar

6.4 提交测试代码

代码提交到gitlab后,gitlab流水线会进行操作,成功后,sonarqube上就有该项目了
在这里插入图片描述

在这里插入图片描述

七、SonarQube整合Idea

1.登录sonarqube,新建项目
在这里插入图片描述
2.设置token
在这里插入图片描述
3.选择maven
在这里插入图片描述
4.使用上面选择maven时复制的命令,提交检测到sonarqube服务器上
在idea的Terminal控制台操作有时会出现一些莫名其妙的异常,此时我们可以通过cmd的方式执行mvn命令
在这里插入图片描述
cmd方式
在这里插入图片描述
在这里插入图片描述
5.sonar管理后台查看报告
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43755251/article/details/129377608
今日推荐