Linux下使用SonarScanner扫描代码

Linux下使用SonarScanner扫描代码

前置条件

  1. 安装好sonarqube
  2. 安装好sonarqube
  3. 使用sonarqube并生成token(默认账号密码是admin/admin)

安装SonarScaner

  1. 下载安装包
    wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip

  2. 解压安装包
    unzip sonar-scanner-cli-4.7.0.2747-linux.zip
    mv sonar-scanner-4.7.0.2747-linux/ /usr/local/src/
    移动到/usr/local/src目录

  3. 配置环境变量
    编辑全局配置文件profile:

    vim /etc/profile

    #配置sonar-scanner

    export SONARRUNNER_HOME=/usr/local/src/sonar-scanner-4.7.0.2747-linux
    export PATH=$SONARRUNNER_HOME/bin:$PATH

    保存并退出

    使配置生效 source /etc/profile

  4. 编辑配置文件,添加配置信息
    vim /usr/local/src/sonar-scanner-4.7.0.2747-linux/conf/sonar-scanner.properties
    具体内容为

    sonar.host.url=http://47.97.161.134:9000
    sonar.login=251691181f005452825220a64ba4dcd07df66ebc
    sonar.sourceEncoding=UTF-8
    

上面的 sonar.login获取方法为, 在sonarqube登陆后, 会自动弹出一个工程框, 输入一个名字后, 可以自动生成一个token

  1. 测试是否安装成功
    sonar-scanner -h

拉取测试代码

  1. 创建工作空间
    mkdir sonar-scanning-workspace
    cd sonar-scanning-workspace/

    [root@iZbp1eq14sxovxncihmbb1Z sonar-scanning-workspace]# pwd
    /root/sonar-scanning-workspace

  2. 使用git拉取代码
    git clone https://github.com/SonarSource/sonar-scanning-examples.git

使用sonar-scanner扫描代码

  1. 进入代码根目录下创建sonar-project.properties配置文件,并编辑
    vim sonar-project.properties

    具体内容为

    在项目根目录下创建sonar-project.properties配置文件
    
    # must be unique in a given SonarQube instance
    sonar.projectKey=fjc_first_sonarscanner_job0130_key
    # this is the name displayed in the SonarQube UI
    sonar.projectName=fjc_first_sonarscanner_job
    sonar.projectVersion=1.0
    sonar.java.binaries=/root/sonar-scanning-workspace/sonar-scanning-examples
    sonar.sources=/root/sonar-scanning-workspace/sonar-scanning-examples
    

    然后在工程的根目录直接执行sonar-scanner就可以开始扫描,扫描完成后会将结果存入sonarqube平台

    参考博客:https://blog.csdn.net/qq_19695883/article/details/116237431

    致谢: 非常感谢博主的细致可用的博客,给了我很大帮助

    注:sonar.java.binaries这个参数对应的文件夹只有编译后,才会生成,默认无此目录,也可以将此目录替换为扫描的路径即可!
    扫描时候的相关日志,供参考,整个扫描时间较长.一共10min37秒,建议慢慢等待,并且在过程中,有时候日志打的很慢

    [root@iZbp1eq14sxovxncihmbb1Z sonar-scanning-examples]# sonar-scanner
    INFO: Scanner configuration file: /usr/local/src/sonar-scanner-4.7.0.2747-linux/conf/sonar-scanner.properties
    INFO: Project root configuration file: /root/sonar-scanning-workspace/sonar-scanning-examples/sonar-project.properties
    INFO: SonarScanner 4.7.0.2747
    INFO: Java 11.0.14.1 Eclipse Adoptium (64-bit)
    INFO: Linux 3.10.0-1160.80.1.el7.x86_64 amd64
    INFO: User cache: /root/.sonar/cache
    INFO: Scanner configuration file: /usr/local/src/sonar-scanner-4.7.0.2747-linux/conf/sonar-scanner.properties
    INFO: Project root configuration file: /root/sonar-scanning-workspace/sonar-scanning-examples/sonar-project.properties
    INFO: Analyzing on SonarQube server 7.4.0
    INFO: Default locale: "en_US", source code encoding: "UTF-8"
    INFO: Publish mode
    INFO: Load global settings
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by com.google.protobuf.UnsafeUtil (file:/root/.sonar/cache/ca892554e2a573da03bc25145df14ef9/sonar-scanner-engine-shaded-7.4-all.jar) to field java.nio.Buffer.address
    WARNING: Please consider reporting this to the maintainers of com.google.protobuf.UnsafeUtil
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    INFO: Load global settings (done) | time=95ms
    INFO: Server id: BF41A1F2-AYYAva_8d7QxnXEV4dy9
    INFO: User cache: /root/.sonar/cache
    INFO: Load/download plugins
    INFO: Load plugins index
    INFO: Load plugins index (done) | time=63ms
    INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
    
    INFO: Load/download plugins (done) | time=482934ms
    INFO: Loaded core extensions: 
    INFO: Process project properties
    INFO: Load project repositories
    INFO: Load project repositories (done) | time=17ms
    INFO: Load quality profiles
    INFO: Load quality profiles (done) | time=34ms
    INFO: Load active rules
    INFO: Load active rules (done) | time=2359ms
    INFO: Load metrics repository
    INFO: Load metrics repository (done) | time=62ms
    INFO: Project key: fjc_first_sonarscanner_job0130_key
    INFO: Project base dir: /root/sonar-scanning-workspace/sonar-scanning-examples
    INFO: -------------  Scan fjc_first_sonarscanner_job
    INFO: Base dir: /root/sonar-scanning-workspace/sonar-scanning-examples
    INFO: Working dir: /root/sonar-scanning-workspace/sonar-scanning-examples/.scannerwork
    INFO: Source paths: .
    INFO: Source encoding: UTF-8, default locale: en_US
    INFO: Load server rules
    INFO: Load server rules (done) | time=2871ms
    INFO: Index files
    INFO: 140 files indexed
    INFO: Quality profile for cs: Sonar way
    INFO: Quality profile for flex: Sonar way
    INFO: Quality profile for java: Sonar way
    INFO: Quality profile for js: Sonar way
    INFO: Quality profile for kotlin: Sonar way
    INFO: Quality profile for php: Sonar way
    INFO: Quality profile for py: Sonar way
    INFO: Quality profile for xml: Sonar way
    INFO: Sensor JavaSquidSensor [java]
    INFO: Configured Java source version (sonar.java.source): none
    INFO: JavaClasspath initialization
    WARN: Bytecode of dependencies was not provided for analysis of source files, you might end up with less precise results. Bytecode can be provided using sonar.java.libraries property
    INFO: JavaClasspath initialization (done) | time=11ms
    INFO: JavaTestClasspath initialization
    INFO: JavaTestClasspath initialization (done) | time=0ms
    INFO: Java Main Files AST scan
    INFO: 32 source files to be analyzed
    INFO: Java Main Files AST scan (done) | time=2259ms
    INFO: Java Test Files AST scan
    INFO: 0 source files to be analyzed
    INFO: Java Test Files AST scan (done) | time=3ms
    INFO: Sensor JavaSquidSensor [java] (done) | time=2813ms
    INFO: Sensor Python Squid Sensor [python]
    INFO: 32/32 source files have been analyzed
    INFO: 0/0 source files have been analyzed
    WARN: Metric 'comment_lines_data' is deprecated. Provided value is ignored.
    INFO: Sensor Python Squid Sensor [python] (done) | time=388ms
    INFO: Sensor PythonXUnitSensor [python]
    INFO: Sensor PythonXUnitSensor [python] (done) | time=4ms
    INFO: Sensor JaCoCo XML Report Importer [jacoco]
    INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=5ms
    INFO: Sensor Kotlin Sensor [kotlin]
    INFO: 3 source files to be analyzed
    INFO: Sensor Kotlin Sensor [kotlin] (done) | time=595ms
    INFO: Sensor SonarJS [javascript]
    INFO: 3/3 source files have been analyzed
    INFO: 1 source files to be analyzed
    INFO: Sensor SonarJS [javascript] (done) | time=194ms
    INFO: Sensor ESLint-based SonarJS [javascript]
    INFO: 1/1 source files have been analyzed
    INFO: Using default Node.js executable: 'node'.
    ERROR: Failure during analysis, Node.js command to start eslint-bridge server was not built yet.
    org.sonarsource.nodejs.NodeCommandException: Error when starting the process: node -v
    	at org.sonarsource.nodejs.NodeCommand.start(NodeCommand.java:75)
    	at org.sonarsource.nodejs.NodeCommandBuilderImpl.getVersion(NodeCommandBuilderImpl.java:172)
    	at org.sonarsource.nodejs.NodeCommandBuilderImpl.checkNodeCompatibility(NodeCommandBuilderImpl.java:145)
    	at org.sonarsource.nodejs.NodeCommandBuilderImpl.build(NodeCommandBuilderImpl.java:121)
    	at org.sonar.plugins.javascript.eslint.EslintBridgeServerImpl.startServer(EslintBridgeServerImpl.java:114)
    	at org.sonar.plugins.javascript.eslint.EslintBasedRulesSensor.execute(EslintBasedRulesSensor.java:81)
    	at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:45)
    	at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:88)
    	at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:62)
    	at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:74)
    	at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:164)
    	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
    	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
    	at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:319)
    	at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:314)
    	at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:288)
    	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
    	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
    	at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:48)
    	at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:82)
    	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
    	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
    	at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:131)
    	at org.sonar.batch.bootstrapper.Batch.doExecuteTask(Batch.java:116)
    	at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:71)
    	at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    	at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
    	at com.sun.proxy.$Proxy0.execute(Unknown Source)
    	at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
    	at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
    	at org.sonarsource.scanner.cli.Main.execute(Main.java:112)
    	at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
    	at org.sonarsource.scanner.cli.Main.main(Main.java:61)
    Caused by: java.io.IOException: Cannot run program "node": error=2, No such file or directory
    	at java.base/java.lang.ProcessBuilder.start(Unknown Source)
    	at java.base/java.lang.ProcessBuilder.start(Unknown Source)
    	at org.sonarsource.nodejs.NodeCommand$ProcessWrapperImpl.start(NodeCommand.java:144)
    	at org.sonarsource.nodejs.NodeCommand.start(NodeCommand.java:71)
    	... 36 common frames omitted
    Caused by: java.io.IOException: error=2, No such file or directory
    	at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
    	at java.base/java.lang.ProcessImpl.<init>(Unknown Source)
    	at java.base/java.lang.ProcessImpl.start(Unknown Source)
    	... 40 common frames omitted
    
    INFO: Sensor ESLint-based SonarJS [javascript] (done) | time=1060ms
    INFO: Sensor C# Properties [csharp]
    WARN: Property missing: 'sonar.cs.analyzer.projectOutPaths'. No protobuf files will be loaded for this project.
    WARN: No roslyn issues report not found for this project.
    INFO: Sensor C# Properties [csharp] (done) | time=0ms
    INFO: Sensor SurefireSensor [java]
    INFO: parsing [/root/sonar-scanning-workspace/sonar-scanning-examples/target/surefire-reports]
    INFO: Sensor SurefireSensor [java] (done) | time=1ms
    INFO: Sensor JaCoCoSensor [java]
    INFO: Sensor JaCoCoSensor [java] (done) | time=1ms
    INFO: Sensor SonarJavaXmlFileSensor [java]
    INFO: 10 source files to be analyzed
    INFO: Sensor SonarJavaXmlFileSensor [java] (done) | time=798ms
    INFO: Sensor Flex [flex]
    INFO: 10/10 source files have been analyzed
    INFO: 2 source files to be analyzed
    INFO: Sensor Flex [flex] (done) | time=106ms
    INFO: Sensor Flex Cobertura [flex]
    INFO: No Cobertura report provided (see 'sonar.flex.cobertura.reportPath' property)
    INFO: Sensor Flex Cobertura [flex] (done) | time=0ms
    INFO: Sensor XML Sensor [xml]
    INFO: 2/2 source files have been analyzed
    INFO: Sensor XML Sensor [xml] (done) | time=284ms
    INFO: Sensor PHP sensor [php]
    INFO: 1 source files to be analyzed
    INFO: No PHPUnit test report provided (see 'sonar.php.tests.reportPath' property)
    INFO: 1/1 source files have been analyzed
    INFO: No PHPUnit coverage reports provided (see 'sonar.php.coverage.reportPaths' property)
    INFO: Sensor PHP sensor [php] (done) | time=554ms
    INFO: Sensor Analyzer for "php.ini" files [php]
    INFO: Sensor Analyzer for "php.ini" files [php] (done) | time=2ms
    INFO: Sensor C# [csharp]
    INFO: Sensor C# [csharp] (done) | time=0ms
    INFO: Sensor Zero Coverage Sensor
    INFO: Sensor Zero Coverage Sensor (done) | time=68ms
    INFO: Sensor Java CPD Block Indexer
    INFO: Sensor Java CPD Block Indexer (done) | time=40ms
    INFO: SCM provider for this project is: git
    INFO: 59 files to be analyzed
    INFO: 59/59 files analyzed
    INFO: 36 files had no CPD blocks
    INFO: Calculating CPD for 12 files
    INFO: CPD calculation finished
    INFO: Analysis report generated in 174ms, dir size=225 KB
    INFO: Analysis reports compressed in 126ms, zip size=149 KB
    INFO: Analysis report uploaded in 477ms
    INFO: ANALYSIS SUCCESSFUL, you can browse http://47.97.161.134:9000/dashboard?id=fjc_first_sonarscanner_job0130_key
    INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
    INFO: More about the report processing at http://47.97.161.134:9000/api/ce/task?id=AYYCFaPl0tw4jLTvaRuM
    INFO: Task total time: 16.198 s
    INFO: ------------------------------------------------------------------------
    INFO: EXECUTION SUCCESS
    INFO: ------------------------------------------------------------------------
    INFO: Total time: 10:37.190s
    INFO: Final Memory: 18M/64M
    INFO: ------------------------------------------------------------------------
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值