• 【03】Jenkins:SonarQube


    写在前面的话

    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 默认运行在 9000 端口,我们可以访问网页查看:

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

  • 相关阅读:
    项目架构工具选择
    idea 引入本地jar包
    java 二维/三维/多维数组
    Windows 远程连接
    SQL SERVER 本地同步数据到远程数据服务器
    利用sp_addlinkedserver实现远程数据库链接
    ORACLE 手动添加时间分区
    ORACLE 时间段
    shiro异常简述
    kvm虚拟机克隆
  • 原文地址:https://www.cnblogs.com/Dy1an/p/11198822.html
Copyright © 2020-2023  润新知