DevOps之Jenkins 集成 SonarQube 、Gitlab实现代码自动提交质量检测

这篇具有很好参考价值的文章主要介绍了DevOps之Jenkins 集成 SonarQube 、Gitlab实现代码自动提交质量检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

实验中相应服务的安装步骤略

准备相关服务器,并实现各个服务器的DNS解析

[root@ubuntu2204 ~]#cat /etc/bind/hailin.org.zone

$TTL 1D

@ IN SOA master admin (

1 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

NS master

master A 10.0.0.201

gitlab A 10.0.0.179

jenkins A 10.0.0.171

harbor A 10.0.0.201

sonarqube A 10.0.0.178

安装 GitLab 和准备项目

安装Gitlab ,安装步骤略,并准备JAVA项目

#可以从gitee码云导入项目代码

https://gitee.com/lbtooth/spring-boot-helloworld.git

文章来源地址https://www.toymoban.com/news/detail-785566.html

#生成如下项目仓库路径

http://gitlab.hailin.org/example/spring-boot-helloworld.git

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

安装 Harbor 并配置 Jenkins 连接Harbor

安装略

创建名为example的项目

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

在 Jenkins 服务器安装Docker,并配置连接 Harbor

#在jenkins服务器安装Docker

[root@jenkins ~]#apt update && apt install docker.io

[root@jenkins ~]#vim /etc/docker/daemon.json

{

"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],

"insecure-registries": ["harbor.hailin.org"]

}

[root@jenkins ~]#systemctl restart docker

[root@jenkins ~]#docker info

Client:

Context: default

Debug Mode: false

Server:

Containers: 0

Running: 0

Paused: 0

Stopped: 0

Images: 3

Server Version: 20.10.21

Storage Driver: overlay2

Backing Filesystem: extfs

Supports d_type: true

Native Overlay Diff: true

userxattr: false

Logging Driver: json-file

Cgroup Driver: systemd

Cgroup Version: 2

Plugins:

Volume: local

Network: bridge host ipvlan macvlan null overlay

Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

Swarm: inactive

Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc

Default Runtime: runc

Init Binary: docker-init

containerd version:

runc version:

init version:

Security Options:

apparmor

seccomp

Profile: default

cgroupns

Kernel Version: 5.15.0-60-generic

Operating System: Ubuntu 22.04.1 LTS

OSType: linux

Architecture: x86_64

CPUs: 4

Total Memory: 3.799GiB

Name: jenkins

ID: 5SU7:WISV:KNTZ:LJ7Y:VCTM:6K7Y:VX2V:SS4U:SDDE:32SX:OMWT:HUEL

Docker Root Dir: /var/lib/docker

Debug Mode: false

Registry: https://index.docker.io/v1/

Labels:

Experimental: false

Insecure Registries:

harbor.hailin.org

127.0.0.0/8

Registry Mirrors:

https://si7y70hh.mirror.aliyuncs.com

Live Restore Enabled: false

#测试登录harbor,登录后可在/root/.docker/config.json下存储登录信息

[root@jenkins sonarqube-scanner]#docker login harbor.hailin.org

Authenticating with existing credentials...

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

[root@jenkins ~]#cat /root/.docker/config.json

{

"auths": {

"10.0.0.201": {

"auth": "YWRtaW46MTIzNDU2"

},

"harbor.hailin.org": {

"auth": "YWRtaW46MTIzNDU2"

}

}

}

安装Jenkins并安装相关插件

安装Jenkins步骤略

安装相关插件和软件:

#GitLab

#pipeline

#企业微信通知插件Qy Wechat Notification

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

在 Jenkins 创建凭据连接 Harbor

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

在 Jenkins 安装Maven 工具

[root@jenkins ~]#apt update;apt install maven -y

#优化编译环境,提升编译速度

[root@jenkins ~]#vim /etc/maven/settings.xml

.......................

<mirror>

<id>nexus-aliyun</id>

<mirrorOf>*</mirrorOf>

<name>Nexus aliyun</name>

<url>http://maven.aliyun.com/nexus/content/groups/public</url>

</mirror>

</mirrors>

........................

#查看Maven信息,记录执行结果供后续与Jenkins对接使用

[root@jenkins ~]#mvn -version

Apache Maven 3.6.3

Maven home: /usr/share/maven

Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64

Default locale: zh_CN, platform encoding: UTF-8

OS name: "linux", version: "5.15.0-60-generic", arch: "amd64", family: "unix"

在Jenkins是配置Maven环境

Mange Jenkins --- Global Tool configuration -- Maven

根据上面的 mvn -version 命令结果,填写 MAVEN_HOME 的路径

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

在 Jenkins 创建连接 GitLab 的凭据

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

在 Jenkins上修改 Docker 的 socket 文件权限

默认Jenkins以Jenkins用户启动,无法访问Docker,构建时会提示如下错误:

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

解决方式

#other用户无docker任何权限,所以导致jenkins权限启动的jenkins服务无权限访问Docker

[root@jenkins ~]#ll /var/run/docker.sock

srw-rw---- 1 root docker 0 2月 1322:15 /var/run/docker.sock=

[root@jenkins ~]#id jenkins

用户id=109(jenkins) 组id=113(jenkins) 组=113(jenkins)

#解决方式一,将jenkins账号添加至docker组

[root@ubuntu2204 ~]#usermod -G docker jenkins

[root@ubuntu2204 ~]#id jenkins

用户id=113(jenkins) 组id=118(jenkins) 组=118(jenkins),119(docker)

[root@ubuntu2204 ~]#systemctl restart jenkins

#解决方式二,修改jenkins以root权限启动

[root@jenkins ~]#vim /lib/systemd/system/jenkins.service

.................

#User=jenkins

User=root

#Group=jenkins

Group=root

.................

安装 SonarQube 并创建用户和令牌

安装 Sonarqueb Server步骤略, ,并在 Sonarqube 创建用户并授权

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

更新令牌,用于后续与jenkins对接

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

记录令牌用于后续使用,此token 只能复制一次

squ_791bc70e1771a1d52a10b8b3cbb6d430111e3037

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

给与新建用户相应权限,这里给用户分配置"执行分析"和"置备项目"权限

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

在 SonarQube 添加 Jenkins 的回调接口

在SonarQube上添加webhook(网络调用),以便于Jenkins通过SonarQube Quality Gate插件调用其"质量阈"信息,决定是否继续执行下面的构建步骤

配置 --- 网络调用 webhook --- 创建

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

输入名称和下面 Jenkins的URL地址注意: 密码防止攻击使用, 可以随意输入注意:此处的密码没有复杂度和长度要求,但建议使用符合安全的密码

http://jenkins.hailin.org:8080/sonarqube-webhook

#使用openssl生成secret,长度3的倍数

[root@jenkins ~]#openssl rand -base64 21

kzwrC4L+TkUDXSTpBZKzIcRQxn5T

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

Jenkins安装SonarQube Scanner 插件

Jenkins—系统管理--插件管理

安装插件 SonarQube Scanner

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

创建Jenkins访问 Sonarqube的令牌凭据

用前面小节生成的Sonarqube令牌,在Jenkins 创建凭据

secret:squ_791bc70e1771a1d52a10b8b3cbb6d430111e3037

ID:sonarqube-jenkins-token

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

在 Jenkins 上配置系统的 SonarQube 服务器信息

Manage Jenkins -- Configure System

注意:Name名称区分大小写

注意:http://sonarqube.hailin.org:9000 地址最后不能加/

否则会报错误 hudson.remoting.ProxyException: net.sf.json.JSONException: Invalid JSON String

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

注意:地址后面别有空格或者/,否则会导致异常

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

在 Jenkins 上安装 SonarQube Scanner

[root@jenkins ~]#cd /usr/local/src

[root@jenkins ~]#wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.8.0.2856-linux.zip

[root@jenkins src]#ls

sonar-scanner-cli-4.8.0.2856-linux.zip

[root@jenkins src]#unzip sonar-scanner-cli-4.8.0.2856-linux.zip

[root@jenkins src]#ln -s /usr/local/src/sonar-scanner-4.8.0.2856-linux/ /usr/local/sonar-scanner

[root@jenkins src]#ln -s /usr/local/sonar-scanner/bin/sonar-scanner /usr/bin/

#配置sonar-scanner连接sonarqube服务器

[root@jenkins src]#vim /usr/local/sonar-scanner/conf/sonar-scanner.properties

#指向sonarqube服务器的地址和端口

sonar.host.url=http://sonarqube.hailin.org:9000

sonar.sourceEncoding=UTF-8

[root@jenkins ~]#sonar-scanner -v

INFO: Scanner configuration file: /usr/local/src/sonar-scanner-4.8.0.2856-linux/conf/sonar-scanner.properties

INFO: Project root configuration file: NONE

INFO: SonarScanner 4.8.0.2856

INFO: Java 11.0.17 Eclipse Adoptium (64-bit)

INFO: Linux 5.15.0-60-generic amd64

准备微信机器人

注册企业微信添加WebHook机器

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

#复制创建机器人生成的webhook地址,用于后续jenkins的对接

https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=3ec91b6e-d5fc-46dd-8464-12fc730b6c9f

准备Pipeline部署脚本

pipeline {

agent any

tools {

maven 'maven-3.6.3'

}

environment {

codeRepo="http://gitlab.hailin.org/example/spring-boot-helloworld.git"

harborServer='harbor.hailin.org'

projectName='spring-boot-helloworld'

imageUrl="${harborServer}/example/${projectName}"

imageTag="${BUILD_ID}"

}

stages {

stage('Source') {

steps {

git branch: 'main', credentialsId: 'gitlab-zhao', url: "${codeRepo}"

}

}

stage('Build') {

steps {

sh'mvn -B -DskipTests clean package'

}

}

stage('Test') {

steps {

sh'mvn test'

}

}

stage("SonarQube Analysis") {

steps {

withSonarQubeEnv('SonarQube-Server') {

sh'mvn sonar:sonar'

}

}

}

stage("Quality Gate") {

steps {

timeout(time: 30, unit: 'MINUTES') {

waitForQualityGate abortPipeline: true

}

}

}

stage('Build Docker Image') {

steps {

sh'docker image build . -t "${imageUrl}:${imageTag}"'

// input(message: '镜像已经构建完成,是否要推送?')

}

}

stage('Push Docker Image') {

steps {

withCredentials([usernamePassword(credentialsId: 'harbor-user-credential', passwordVariable: 'harborPassword', usernameVariable: 'harborUserName')]) {

sh"docker login -u ${env.harborUserName} -p ${env.harborPassword} ${harborServer}"

sh"docker image push ${imageUrl}:${imageTag}"

}

}

}

}

post{

success{

qyWechatNotification failNotify: true, webhookUrl: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=3ec91b6e-d5fc-46dd-8464-12fc730b6c9f'

}

failure{

qyWechatNotification failNotify: true, webhookUrl: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=3ec91b6e-d5fc-46dd-8464-12fc730b6c9f'

}

}

}

创建任务使用 Pipeline Script

根据前面的相应配置创建Pipeline风格的任务

直接使用Pipeline Script

任务名:pipeline-sonarqube-docker-spring-boot-helloWorld

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

安装Pipeline Stage View 插件实现阶段化视图

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

执行构建验证结果

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

增加自动触发功能

Jenkins项目中配置自动出发构建功能
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

url地址:http://10.0.0.171:8080/project/pipeline-sonarqube-docker-spring-boot-helloWorld

token:0189b45ee628041d29b2015ccf8fc88d

Gitlab上设置webhook
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

测试推送事件

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

调整代码实现代码自动上传执行构建

#开发设备上调整代码

[root@SonarQube-Server spring-boot-helloworld]#ls

deploy Jenkinsfile pom.xml sonar-project.properties

Dockerfile LICENSE README.md src

[root@SonarQube-Server spring-boot-helloworld]#vim src/

main/ test/

[root@SonarQube-Server spring-boot-helloworld]#vim sonar-project.properties

[root@SonarQube-Server spring-boot-helloworld]#git commit -m 'modify sonar-project.properties'

位于分支 main

您的分支与上游分支 'origin/main' 一致。

尚未暂存以备提交的变更:

(使用 "git add <文件>..." 更新要提交的内容)

(使用 "git restore <文件>..." 丢弃工作区的改动)

修改: sonar-project.properties

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[root@SonarQube-Server spring-boot-helloworld]#git add .

[root@SonarQube-Server spring-boot-helloworld]#git commit -m 'modify sonar-project.properties'

[main e9b8191] modify sonar-project.properties

1 file changed, 1 insertion(+), 1 deletion(-)

[root@SonarQube-Server spring-boot-helloworld]#git push

Username for 'http://gitlab.hailin.org': zhao

Password for 'http://zhao@gitlab.hailin.org':

枚举对象中: 5, 完成.

对象计数中: 100% (5/5), 完成.

使用 2 个线程进行压缩

压缩对象中: 100% (3/3), 完成.

写入对象中: 100% (3/3), 321 字节 | 321.00 KiB/s, 完成.

总共 3(差异 2),复用 0(差异 0),包复用 0

To http://gitlab.hailin.org/example/spring-boot-helloworld.git

d69bcfc..e9b8191 main -> main

gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档
gitlab sonar提交前检查,linux,devops,jenkins,git,Powered by 金山文档

到了这里,关于DevOps之Jenkins 集成 SonarQube 、Gitlab实现代码自动提交质量检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DevOps极速入门丨Gitlab丨Jenkins丨harbor丨CICD丨自动化丨运维开发

    一、DevOps介绍 软件开发最开始是由两个团队组成: 开发计划由开发团队从头开始设计和整体系统的构建。需要系统不停的迭代更新。 运维团队将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。 这看似两个目标不同的团队需要协同完成一个软件的开发。 在开发

    2023年04月18日
    浏览(50)
  • sonarqube安装以及jenkins集成sonarqube

    docker 方式安装是最简便的,我选择了这个安装方式 1、下载镜像 2、 创建挂载目录 3、运行容器 4、通过ip 端口访问:http://ip:9090 1、jenkins下载插件: 进入插件管理,搜索sonar,选择SonarQube Scanner for Jenkins安装,安装好后重启jenkins服务。 2、sonarqube创建访问令牌 sonarqube中生成用户

    2024年02月11日
    浏览(38)
  • 【业务功能115】微服务-springcloud-springboot-Kubernetes-k8s集群-Kubesphere实现DevOps流水线-CI/CD-SonarQube- Jenkins

    dev 怎么开发 ops 怎么运维 参考项目链接:https://github.com/kubesphere/devops-maven-sample 持续集成是指软件个人的部分向软件整体部分交付,频繁进行集成以便更快地发现其中错误。 CI需要具备这些: 全面的自动化测试 这是实践持续集成持续部署的基础,同时,选择合适的自动化测

    2024年02月04日
    浏览(64)
  • DevOps概念及搭建全过程(Jenkins、Harbor、SonarQube、K8s)

    在如今互联网的格局下,抢占市场变得尤为重要,因此敏捷开发越来越被大家所推崇。于是,慢慢的有了DevOps这个概念,大致意思是开发-运维一体化。 1.1 基本概念 可以看到上图是一个无穷大的一个符号,Dev对应开发,Ops对应运维。 DevOps的方式可以让公司能够更快地应对更

    2023年04月17日
    浏览(35)
  • Devops系列六(CI篇之jenkinsfile)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

    上文我们说了pipeline,已为本文铺路不少,接下里就是将之串联起来。 先想说下,为什么是jenkinsfile, 因为jenkins job还支持pipeline方式。 这种方式,不建议实际使用,仅限于测试或调试groovy代码。 下面贴出来,我们的使用方式。好处是:采用分布式的思想,改动git上的jenkinsf

    2024年02月13日
    浏览(41)
  • 【Jenkins】持续集成与交付 (六):Gitlab代码托管服务安装

    💖The Begin💖点点关注,收藏不迷路💖

    2024年04月28日
    浏览(28)
  • DevOps系列文章 之 SpringBoot整合GitLab-CI实现持续集成

    在企业开发过程中,我们开发的功能或者是修复的BUG都需要部署到服务器上去,而这部分部署操作又是重复且繁琐的工作,GitLab-CI 持续集成为我们解决了这一痛点,将重复部署的工作自动化,大大的节省了程序员们的宝贵时间。本文详细讲述了 GitLab-CI 持续集成的安装、部署

    2024年02月13日
    浏览(35)
  • Devops系列五(CI篇之pipeline libraray)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

    本文是CI篇的上文,因为上一篇已经作了总体设计,就不再赘述,有需要的请看前文。 我们将演示,使用CI工具–jenkins,怎么和CD工具–argocd串联,重点是在Jenkins该怎么做。准备工作和argocd等相关事项,在前文已铺垫ok。 Jenkins,我们是使用k8s来部署的一个master-slave结构的集群

    2024年02月13日
    浏览(35)
  • Jenkins流水线整合k8s实现代码自动集成和部署

    1、安装好k8s集群 这里先要搭建好一个K8s集群,笔者这边就采用使用了一个一主一丛的k8s集群,k8s集群的版本使用1.19.5版本,服务器的配置:2核4G,操作系统: CentOS Linux release 7.9.2009 (Core) 主机名         ip k8smaster 192.168.19.8 k8sworker         192.168.19.9 具体的安装步骤可以

    2024年02月05日
    浏览(39)
  • Jenkins集成SonarQube保姆级教程

    Jenkins是自动化部署平台,一个粗眉大眼的糙汉子! SonarQube是代码扫描平台,一个眉目清秀的小女子! 有一天,上天交给我一个任务,去撮合撮合他们! 我抬头看了看天, 不,天花板。 这事儿有戏! 不废话,开干! jenkins和SonarQube的搭建过程就忽略了,不知道的可以看:

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包