【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:'admin@example.com')
#修改密码(密码不能包含常用的单词和字母组合)
user.password ='hello@2023'
user.password_confirmation ='hello@2023'
#保存
user.save!
#退出控制台
exit
#退出容器
exit

在这里插入图片描述

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

1.管理员账号:admin@example.com
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管理后台查看报告
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值