SonarQube服務搭建


SonarQube服務搭建

一 、 先決條件和概述

JDK

Java Server Scanners
Oracle JRE 11 ≥8
OpenJDK 11 ≥8

 

 

 

 

數據庫

數據庫 版本 備注
PostgreSQL ≥9.3 UTF-8 charset
Oracle ≥11g UTF-8 charset
MSSQL ≥14  

 

 

 

 

 

 

硬件要求

實例至少需要2GB的RAM才能有效運行,而OS則需要1GB的可用RAM。

企業建議配置: 8C16G

Linux配置要求:

  • vm.max_map_count 大於或等於524288

  • fs.file-max 大於或等於131072

  • 運行SonarQube的用戶可以打開至少131072個文件描述符

  • 運行SonarQube的用戶可以打開至少8192個線程

檢查方法

sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u

 

內核支持seccomp過濾器

默認情況下,Elasticsearch使用seccomp filter

$ grep SECCOMP /boot/config-$(uname -r)

 

字體

  • Fontconfig已安裝在托管SonarQube的服務器上

  • SonarQube服務器上安裝了FreeType字體包。可用的確切軟件包會因分發而異,但是常用的軟件包是libfreetype6

     

二、 在Docker上安裝

2.1 配置系統參數

修改/etc/sysctl.d/99-sonarqube.conf

vm.max_map_count=534288
fs.file-max=141072

讓其生效

sysctl -p /etc/sysctl.d/99-sonarqube.conf

2.2 編寫docker-compose

/docker-compose/sonarqube/docker-compose.yml

參考: https://github.com/SonarSource/docker-sonarqube

version: "3"
​
services:
  sonarqube:
    image: sonarqube:8.2-community
    depends_on:
      - db
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
      - sonarqube_temp:/opt/sonarqube/temp
  db:
    image: postgres
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
      - postgresql:/var/lib/postgresql
      # This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
      - postgresql_data:/var/lib/postgresql/data
​
networks:
  sonarnet:
    driver: bridge
​
volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  sonarqube_temp:
  postgresql:
  postgresql_data:

  

 

2.3 啟動

cd /docker-compose/sonarqube
docker-compose up

訪問:http://192.168.0.80:9000/

初始賬戶和密碼: admin/admin

 

三、 服務器配置

3.1 安裝中文插件

Administration --> Marketplace

搜索Chinese Pack

 

3.2 修改初始密碼

配置 > 權限 > 用戶

選擇admin用戶,點擊輪滑按鈕,選擇重置密碼

 

3.3 創建新用戶並生成token

配置 > 權限 > 用戶 > 創建用戶

創建完成后點擊令牌

並記住令牌

 

四、 Jenkins與SonarQube集成插件的安裝與配置

4.1 安裝Jenkins的SonarScanner

  1. 系統管理 > 插件管理 > 可選插件

  2. 搜索SonarQube Scanner

  3. 點擊直接安裝

 

4.2 配置SonarQube服務器

Jenkins面板點擊:系統管理 > 系統配置 > SonarQube servers > Add SonarQube

填入

Name: Frog

Server URL: http://192.168.0.80:9000

Token: 注意新加token,選擇類型為Sercet file

 

4.3 安裝SonarQube Scanner

wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.4.0.2170-linux.zip
unzip sonar-scanner-cli-4.4.0.2170-linux.zip

 

4.4 配置Sonar Scanner

編輯/opt/sonar-scanner-4.4.0.2170-linux/conf/sonar-scanner.properties

sonar.host.url=http://192.168.0.80:9000
sonar.sourceEncoding=UTF-8

 

4.5 配置 Sonar Scanner

進入Jenkins系統管理 > 全局工具配置

點擊新增SonarQube Scanner,不勾選自動安裝,

配置SonarQube Scanner

Name: sonar

Sonar_Runner_Home: /opt/sonar-scanner-4.4.0.2170-linux

點擊“保存”

 

4.6 Jenkins配置檢查任務

Jenkins > 項目 > 增加構建任務

選擇Execute SonarQube Scanner

 

Task to run: scan # 即分析代碼

Path to project properties: 這里可以指定一個 sonar-project.properties 文件,如果不指定的話會使用項目默認的 properties 文件

Analysis properties : 這里需要輸入一些配置參數用來傳遞給 SonarQube,

這里的參數優先級高於 sonar-project.properties 文件里面的參數,

所以可以在這里來配置所有的參數以替代 sonar-project.properties 文件

sonar.projectKey=eploicy:print
sonar.projectName=Winglung Epolicy Print
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=GBK
sonar.java.binaries=$WORKSPACE/webapps/WEB-INF/classes      
sonar.sources=$WORKSPACE/component/com/sinosoft/application

注解:

sonar.projectKey:

sonar.java.binaries: 項目編譯后二進制文件存放目錄

sonar.sources: 需要分析的Java源碼目錄

 

開啟debug模式

Additional arguments: -X

JVM配置

JVM Options: -Xmx2048m -Xms256m -XX:+HeapDumpOnOutOfMemoryError

 

五、 使用Ant和SonarScanner集成

5.1 下載SonarScanner for Ant

cd /opt
wget https://binaries.sonarsource.com/Distribution/sonarqube-ant-task/sonarqube-ant-task-2.7.0.1612.jar

 

5.2 編寫項目的build.xml

參考: https://github.com/SonarSource/sonar-scanning-examples

<?xml version="1.0" encoding="UTF-8"?>
<project name="Simple Project analyzed with the SonarQube Scanner for Ant" default="all" basedir="." xmlns:sonar="antlib:org.sonar.ant">
​
    <!-- ========= Define the main properties of this project ========= -->
    <property name="src.dir" value="src" />
    <property name="build.dir" value="target" />
    <property name="classes.dir" value="${build.dir}/classes" />
    
    <!-- Define the SonarQube global properties (the most usual way is to pass these properties via the command line) -->
    <property name="sonar.host.url" value="http://192.168.0.80:9000" />
​
    <!-- Define the Sonar properties -->
    <property name="sonar.projectKey" value="org.sonarqube:sonarqube-scanner-ant" />
    <property name="sonar.projectName" value="Example of SonarQube Scanner for Ant Usage" />
    <property name="sonar.projectVersion" value="1.0" />
    <property name="sonar.sources" value="src" />
    <property name="sonar.binaries" value="target" />
    <property name="sonar.sourceEncoding" value="UTF-8" />
    
    <!-- ========= Define "regular" targets: clean, compile, ... ========= -->
    <target name="clean">
        <delete dir="${build.dir}" />
    </target>
​
    <target name="init">
        <mkdir dir="${build.dir}" />
        <mkdir dir="${classes.dir}" />
    </target>
​
    <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${classes.dir}" fork="true" debug="true" includeAntRuntime="false" />
    </target>
​
    <!-- ========= Define SonarQube Scanner for Ant Target ========= -->
    <target name="sonar" depends="compile">
        <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
            <!-- Update the following line, or put the "sonar-ant-task-*.jar" file in your "$HOME/.ant/lib" folder -->
            <classpath path="/opt/sonarqube-ant-task-2.7.0.1612.jar" />
        </taskdef>
        
        <!-- Execute SonarQube Scanner for Ant Analysis -->
        <sonar:sonar />
    </target>
​
    <!-- ========= The main target "all" ========= -->
    <target name="all" depends="clean,compile,sonar" />
​
</project>

  

六、 使用Manev和SonarScanner集成

6.1 Maven的全局設置

在$MAVEN_HOME/conf 或者 ~/.m2目錄下的setting.xml中配置

<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                  http://myserver:9000
                </sonar.host.url>
            </properties>
        </profile>
     </profiles>
</settings>

  

 6.2 pom.xml配置參數
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.release>11</maven.compiler.release>
</properties>

  

 6.3 分析
mvn clean verify sonar:sonar -Dsonar.login=myAuthenticationToken

 或者

mvn clean install
mvn sonar:sonar -Dsonar.login=myAuthenticationToken

 

要指定sonar-maven-plugin的版本而不是使用最新的版本:

mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar

  

 建議鎖定Maven插件的版本:

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.sonarsource.scanner.maven</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>3.7.0.1746</version>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

  

6.4 故障排除

如果收到java.lang.OutOfMemoryError
設置MAVEN_OPTS環境變量,例如在* nix環境中:

export MAVEN_OPTS="-Xmx512m"

  

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM