美文网首页
Sonar+OC+Jenkins 静态代码扫描

Sonar+OC+Jenkins 静态代码扫描

作者: 风ai翔 | 来源:发表于2020-09-11 11:30 被阅读0次

    一、安装

    笔者遇到的问题:

    • 特别注意版本号,不同版本不兼容导致重装很多次

    • 注意Homebrew默认安装的插件是最新版

    • Sonar7.9+不再支持Mysql

    • Mysql8.0授权命令有更新

    • Sonar7.0需要使用低版本JDK

    • JDK1.8和JDK14同时安装了,Sonar启动时内部冲突,卸载JDK14

    1.安装JDK1.8

    https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

    2.安装Mysql5.7

    https://dev.mysql.com/downloads/mysql/5.7.html

    • 创建sonar数据库和用户
    mysql -u root -p
    CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
    CREATE USER 'sonar' IDENTIFIED BY 'sonar';
    GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
    GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
    FLUSH PRIVILEGES;
    
    • mysql其他简单命令
    show databases;
    show tables;
    use 数据库名;
    select user,host from user;
    exit;
    

    3.安装Sonar7.0

    https://www.sonarqube.org/downloads/
    解压到/usr/local/sonar/sonarqube-7.0/bin/...

    4.安装sonar-runner2.4

    https://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip
    解压到/usr/local/sonar-runner/bin/...

    二、配置

    1.配置环境变量

    export PATH=/usr/local/bin:$PATH
    export PATH=$PATH:/usr/local/sonar-runner/bin
    
    export PATH=$PATH:/usr/local/mysql/bin
    export PATH=$PATH:/usr/local/mysql/support-files
    
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
    • 使配置生效,执行:
    #若终端提示命令找不到 not found **,执行:
    source ~/.bash_profile
    

    2.添加sonar配置:

    • 打开/usr/local/sonar/sonarqube-7.0/conf/sonar.properties添加以下
    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonar
    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    
    • 打开/usr/local/sonar/sonarqube-7.0/conf/wrapper.conf修改以下
    #修改可用内存大小,默认设置的值太小会导致server启动失败
    wrapper.java.initmemory=2096
    wrapper.java.maxmemory=20960
    

    3.添加sonar-runner配置:

    • 打开/usr/local/sonar-runner/conf/sonar-runner.properties添加以下
    sonar.host.url=http://localhost:9000
    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonar
    sonar.sourceEncoding=UTF-8
    sonar.login=admin
    sonar.password=admin
    

    4.修改mysql配置,设置更大内存和可一次性提交的包大小

    • 打开/usr/local/etc/my.cnf添加以下
    [mysqld]
    ...
    max_allowed_packet = 150M
    innodb_log_file_size = 150994944
    query_cache_type=1
    query_cache_size=32M
    

    5.设置关键文件读写权限:

    原因:/usr/local/文件下默认只有root用户能修改,而sonar内的elasticsearch不能使用root用户运行,但是sonar要往log里写日志需要root权限。那么就将/usr/local/sonar改为普通用户等级。

    cd /usr/local/sonar
    ls -l
    sudo chown -R [本机用户名] /usr/local/sonar
    ls -l
    

    三、运行

    1.启动mysql服务

    #修改了配置记得restart服务
    mysql.server start
    

    2.启动sonar服务

    cd /usr/local/sonar/sonarqube-7.0/bin/macosx-universal-64
    #修改了配置记得restart服务
    sh sonar.sh start
    

    注:sonar内的elasticsearch不能使用root用户运行,所以不能用 sudo sh sonar.sh start

    3.打开 http://localhost:9000/ 校验是否成功启动sonar服务

    若失败,则去/usr/local/sonar/sonarqube-7.0/logs/路径下查找报错日志,逐一解决

    问题1:常见的数据库连接失败:

    • 检查mysql版本是否兼容sonar【sonar.properties注释有说明】
    • 是否成功创建了数据库和用户及授权
    • 端口号3306
    • mysql服务是否启动

    问题2:elasticsearch不能使用root用户运行

    • 不使用sudo命令启动服务 sudo sh sonar.sh start
    • 修改sonar安装文件根目录用户权限,参见【二-5.设置关键文件读写权限】

    四、项目配置

    1.安装oc的插件

    https://github.com/ChenTF/iOS-sonarShell/blob/master/sonar-objective-c-plugin-0.5.0-SNAPSHOT.jar
    移动到插件文件夹下:/usr/local/sonar/sonarqube-7.0/extensions/plugins
    重启sonar生效

    2.使用Homebrew安装xcpretty、oclint、gcovr

    gem install xcpretty
    brew tap oclint/formulae
    brew install oclint
    brew install gcovr
    

    3.创建项目配置文件sonar-project.properties,根据自己项目情况修改,保存到项目*.xocdeproj同级目录下

    https://github.com/ChenTF/iOS-sonarShell/blob/master/sonar-project.properties

    4.执行扫描脚本,解析结果,整理上传

    #1.编译生成错误信息 并转化成json格式
    xcodebuild clean -workspace "***.xcworkspace" -scheme "***" -sdk iphonesimulator  build | tee "./sonar/xcodebuild.log" | xcpretty -r json-compilation-database --output compile_commands.json
    
    #2.oclint解析
    oclint-json-compilation-database -- -max-priority-1 10000 -max-priority-2 10000 -max-priority-3 10000 -rc LONG_LINE=150 -report-type html -o oclint.xml
    
    #3.上传到sonnar
    sonar-runner
    

    5.刷新http://localhost:9000/ 即可看到检查结果

    五、Jenkins配置

    上面提到的方案为手动执行扫描脚本,也可以利用CI可持续集成工具触发代码扫描,效率更高。

    1.Jenkins安装插件SonarQube Scanner

    2.Jenkins -> 系统管理 -> 系统配置:

    SonarQube servers栏 设置Server URL=http://localhost:9000/ Server authentication token=(在http://localhost:9000/account/security/中生成token)

    3.Jenkins -> 系统管理 -> 全局工具配置:

    SonarQube Scanner栏 设置如图

    image

    4.在你的打包工程下添加构建步骤

    image

    5.配置项目,类似于sonar-project.properties的配置

    image

    6.开始Jenkins构建项目,成功后数据会自动上传到http://localhost:9000/

    相关文章

      网友评论

          本文标题:Sonar+OC+Jenkins 静态代码扫描

          本文链接:https://www.haomeiwen.com/subject/hfbvektx.html