写在前面的话

SonarQube 这个服务有些人熟悉,有些人陌生。对于我们这样的运维人员,我们需要了解的是,SonarQube 是一个代码质量管理平台,懂得怎么安装配置,这其实就差不多足够了。我们在 Jenkins 这里专门提到这个东西,其原因就在于 Jenkins 有这么个插件,这个插件还被相当多的公司用到。所以得提出了聊聊他。

SonarQube 的安装

目前这样的服务大多都已经提供了 docker 安装的方式,如果你对于 docker 很熟悉且你本身在使用,那么你可以使用。我这里还是使用比较传统的方法运行它。

下载地址:

https://www.sonarqube.org/downloads/

我当前下载的是官网最新的社区版:7.8

1. 由于 Sonar 的运行需要依赖于 JDK,所有我们可以将 JDK 加入环境变量:

echo 'export JAVA_HOME=/data/jdk8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile # 生效
source /etc/profile

此时通过 java -version 是可以看到 JDK 版本信息的:

2. 将 sonar 解压:

cd /data/
unzip sonarqube-7.8.zip
ln -s sonarqube-7.8 sonar
mv sonarqube-7.8.zip /tmp/

此时在 /data 目录下 sonar 目录就是我们的服务目录。

3. 由于是 Java 服务,所有 sonar 其实是跨平台的,我们是 linux 的机器,所以找到 linux 的目录:

注意,此时我们并不能直接启动,因为 es 的运行用户不能为 root,所以我们需要修改权限启动:

# 添加用户,修改目录权限
useradd sonar
cd /data/
chown -R sonar.sonar sonar
chown -R sonar.sonar sonarqube-7.8 # 切换用户启动
su - sonar
cd /data/sonar/bin/linux-x86-64/
./sonar.sh console

结果如下:

这就是启动完成的标识,我们需要知道的是,Sonar 默认运行在 端口,我们可以访问网页查看:

4. 但作为生产访问,这样配置是不够的,我们需要增加数据库连接配置,这里以 MySQL 为例:

我们在另外一台机的 MySQL 数据库新建了一个名为 sonar 的数据库,并授权给用户 sonar,密码也是 sonar。

由于刚刚我们 console 调试模式启动的,所以 ctrl + C 就可以停止服务。

此时需要去修改 sonar 的配置文件:/data/sonar/conf/sonar.properties 

如果你非常熟悉 Java 服务你就会觉得很简单,就是 Java 的 JDBC 配置,系统默认注释了,需要放开,我这里的配置如下:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://192.168.10.204:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

我们也可以在该配置文件中配置其他:

运行端口:sonar.web.port=9000

运行内存:sonar.web.javaOpts=-server -Xmx2G -Xms2G -XX:+HeapDumpOnOutOfMemoryError

5. 再度启动 Sonar:

此时我们发现 sonar 启动会报错:

解决办法:

切换到 root 用户,修改配置:

# 配置
sysctl -w vm.max_map_count=262144 # 查看
sysctl -a | grep vm.max_map_count # 永久生效
echo 'vm.max_map_count=262144' >> /etc/sysctl.conf

切换会 sonar 用户,再度重启,由于此次重启会初始化一些数据到我们刚刚配置的数据库,所以第一次比较耗时。

你可以连接到数据库查看生成情况,但是我当前的版本存在 BUG,需要手动执行一个 SQL:

insert into schema_migrations values (2128);

否则 sonar 无法启动,在初始化数据的时候会报错。

执行完成后重启 sonar 访问修复:

http://192.168.10.202:9000/setup

之后如果卡在 Sonar 正在重启中的页面,可以去服务器执行:

./sonar.sh restart

结果:

默认初始账户:admin / admin

6. 中文汉化:

安装完成后按照提示重启!

7. 安装配置,只允许登录用户查看:

此时 Sonar 就只能登录用户才能查看了。

Jenkins 配置 Sonar

1. Jenkins 本身是不具备支持 Sonar 的功能的,需要我们安装 Sonar 插件来实现 Sonar 的支持:

打开:系统管理 --> 插件管理

2. 在 Sonar 中创建 Token:

记住这个令牌,因为后面就无法查看他了。

3. 在 Jenkins 中配置 Sonar:

打开:系统管理 --> 系统设置

值得注意的是,新版本的 Sonar 插件和老版本填写 Token 的方式已经不一样了,我们需要以添加凭据的形式添加!

4. Jenkins 添加 Sonar Scaner:

我们这里采用系统帮我们安装的方式,打开:系统管理 --> 全局工具配置

5. Jenkins 任务添加 Sonar 检测:

其中 projectKey 和 projectName 随便填写,但是要有意义,因为这将会是在 Sonar 中显示的项目名。

配置如下:

sonar.projectKey=Jenkin-Test-Sonar
sonar.projectName=Jenkin-Test-Sonar
sonar.projectVersion=1.0
sonar.language=java
sonar.sources=./
sonar.sourceEncoding=UTF-8
sonar.java.binaries=./

结果如下:

配置完成后界面会多一些东西,此时我们点击 立即构建 测试:

构建记录后面会多 sonar 图标,我们可以点击跳转过去,但是第一次 Sonar 需要对项目代码进行分析,所以会比较耗时:

最终结果如图!

Jenkins 结合 Sonar 的初步使用大体就是这些,至于更多的关于 Sonar 的用法,可以自己去研究。

小结

Sonar 对于运维工程师来说更多的还是搭建维护,这东西其实际是针对程序员开发的。我们需要搭建起来,至于怎么用,丢给程序员。

【03】Jenkins:SonarQube的更多相关文章

  1. 【09】Jenkins:Pipeline 补充

    写在前面的话 我们在使用普通的构建任务的时候使用了 Sonar 做代码质量管理,也使用了 Publish Over SSH 插件中更新上线,但是我们在 Pipeline 怎么使用他们呢. 如果你没有查 ...

  2. 【03】Kubernets:K8S 操作入门

    写在前面的话 经过上一节,我们顺利将 K8S 集群搭建了起来,在其中我也简单的谈了一下关于 K8S 的网络.那么这一节我们主要谈谈如何来简单的使用 K8S 的命令.当然这些命令有很多,我们只是通过一个 ...

  3. 【06】Jenkins:Gitlab 自动触发构建以及钉钉通知

    写在前面的话 在某些时候,我们希望能够实现这样一个功能,当用户提交东西到 gitlab 上的时候,希望它能够自动触发构建,发布到我们需要的环境. 目前我们内部有做类似的需求:产品提交原型到 gitla ...

  4. 【01】Jenkins:安装配置

    写在前面的话 从我的工作经历来看,刚出来的时候的第一家公司我们上线采用的是脚本上线.就是那种开发合并完代码以后,在一个固定的时间点,我们上服务器执行更新脚本打包更新.这种方法有一个很大的问题,就是对于 ...

  5. 【08】Jenkins:关于发布

    写在前面的话 Jenkins 对于我们用户而言,可能中间会有不同的需求,比如自动构建,接口测试,代码质量检测.但其实我们的最终目的还是打包上线.当然,各个公司的项目开发语言会不一样,但是总体而言发布方 ...

  6. 【07】Jenkins:流水线(Pipeline)

    写在前面的话 个人认为 Pipeline 在 Jenkins 中算是一个优化性功能,它能够将我们的构建服务的整个过程流程化,这意味着当我们在执行到某一步的时候,可以添加询问,提示我们是否继续运行下一步 ...

  7. 【05】Jenkins:用户权限管理

    写在前面的话 在一个企业研发部门内部,可能存在多个运维人员,而这些运维人员往往负责不同的项目,但是有可能他们用的又是同一个 Jenkins 的不同用户.那么我们就希望实现一个需求,能够不同的用户登录 ...

  8. 【04】Jenkins:基本功能补充说明

    写在前面的话 在 Jenkins 中有那么一些功能,可能你几乎不会怎么用到,但是某些时候又能够帮助你解决一些很麻烦的事情.我这里单独的把这些小配置抽离出来作为一个单独章节.很多配置不需要记得,但是要知 ...

  9. 【02】Jenkins:第一个项目

    写在前面的话 通过上一节我们成功的搭建起来 Jenkins,那么接下来就是体验如何构建我们的第一个项目了.当然在这之前我们得专门针对 Java 环境就行简单的配置. 全局工具配置 其实这次配置的主要还 ...

随机推荐

  1. PMP备考-第三章-项目管理过程

    过程:完成预定目标的,一系列相互关联的活动的集合,以便运用一些列工具与技术把特定的输入转化成特定的输出. 五大项目管理过程组:启动-规划-执行-监控-收尾 戴明环(PDCA循环):计划-实施-检查-行 ...

  2. 利用Python模拟登录pastebin.com

    任务 在https://pastebin.com网站注册一个账号,利用python实现用户的自动登录和创建paste.该任务需要分成如下两步利用python实现: 账号的自动登录 paste的自动创建 ...

  3. windows及linux环境下修改pip的默认镜像源的方法

    1. 在windows环境下 临时修改 使用清华大学的源安装numpy包. pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple ...

  4. Ubuntu18.04.2下安装 RTX2080 Nvidia显卡驱动

    转载请注明出处:BooTurbo  https://www.cnblogs.com/booturbo/p/11261903.html 不久前入手了蓝天P870TM1G准系统,配置如下: 1. Z370 ...

  5. xenserver 添加和卸载硬盘

                最近在浪潮服务器上安了xenserver系统,创建虚拟机,没注意磁盘超负载就重启了服务导致各种坑,一言难尽,忧伤逆流成河啊,所以准备将各种操作整理总结记录下,持续更新ing~~ ...

  6. 跳表和ConcurrentSkipListMap解析

    二分查找和AVL树查找 二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存.这样查找确实很快,但是插入和删除元素的时候,为了保证元素的有序性,就需要大量的移动元素了. 如果需要的是一个能 ...

  7. Go语言goroutine调度器概述(11)

    本文是<go调度器源代码情景分析>系列的第11篇,也是第二章的第1小节. goroutine简介 goroutine是Go语言实现的用户态线程,主要用来解决操作系统线程太“重”的问题,所谓 ...

  8. 201871010126 王亚涛 《面向对象程序设计JAVA》第十四周学习总结

    内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11 ...

  9. sqler 2.2 发布了,支持定时任务以及触发器

    sqler 在10前发布了,2.2 添加了定时任务以及触发器(webhook),都是比较方便的功能, 同时我也修改了dockerfile, 做了构建,添加了功能支持,同时push 到了dockerhu ...

  10. Vue插槽详解 | 什么是插槽?

    作者 | Jeskson 来源 | 达达前端小酒馆 什么是插槽?插槽的指令为v-slot,它目前取代了slot和slot-scope,插槽内容,vue实例一套内容分发的api,将slot元素作为承载分 ...