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

一、前言二、准备工作三、安装Gitlab3.1 Docker安装最新版Gitlab3.2 访问Gitlab登录页面: [http://192.168.0.132:6001](http://192.168.0.132:6001)

四、安装GitLab-Runner4.1 Docker安装最新版GitLab-Runner4.2 在Gitlab的测试项目里查看runner4.3 流水线测试4.3.1 在maven项目下新建.gitlab-ci.yml文件4.3.2 提交文件到Gitlab上4.3.3 观察CI/CD流水线4.3.4 gitlab-ci.yml使用4.3.4 gitlab-runner常用命令

五、安装Sonarqube5.1 Docker安装postgresql数据库5.2 Docker安装Sonarqube5.3 访问Sonarqube管理页面:[http://192.168.0.132:9000](http://192.168.0.132:9000)5.4 Sonar安装中文插件

六、SonarQube整合Gitlab6.1 Sonar新建测试项目6.2 注册测试项目的gitlab-runner6.3 在测试项目下修改.gitlab-ci.yml文件6.4 提交测试代码

七、SonarQube整合Idea

一、前言

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定义一个作业阶段(默认值:)testscript必须参数,由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

#获取帮助信息

gitlab-runner --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管理后台查看报告

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。