
本節(jié)介紹單節(jié)點(diǎn) SonarQube 實(shí)例。 有關(guān)集群設(shè)置的詳細(xì)信息,請(qǐng)參閱將服務(wù)器安裝為集群。
SonarQube 實(shí)例包含三個(gè)組件:
為了獲得最佳性能,SonarQube 服務(wù)器和數(shù)據(jù)庫應(yīng)該安裝在不同的主機(jī)上,并且服務(wù)器主機(jī)應(yīng)該是專用的。 服務(wù)器和數(shù)據(jù)庫主機(jī)應(yīng)位于同一網(wǎng)絡(luò)中。
所有主機(jī)都必須是時(shí)間同步的。
支持多個(gè)數(shù)據(jù)庫引擎。 請(qǐng)務(wù)必遵循為您的數(shù)據(jù)庫列出的要求。 它們是真正的要求而不是建議。
創(chuàng)建一個(gè)空架構(gòu)和一個(gè) sonarqube 用戶。 授予此 sonarqube 用戶權(quán)限以創(chuàng)建、更新和刪除此架構(gòu)的對(duì)象。
Microsoft SQL Server
排序規(guī)則必須區(qū)分大小寫 (CS) 和區(qū)分重音 (AS)。
READ_COMMITED_SNAPSHOT 必須在 SonarQube 數(shù)據(jù)庫上設(shè)置。
MS SQL 數(shù)據(jù)庫的共享鎖策略可能會(huì)影響 SonarQube 運(yùn)行時(shí)。 確保 is_read_committed_snapshot_on 設(shè)置為 true 以防止 SonarQube 在重負(fù)載下面臨潛在的死鎖。
檢查 is_read_committed_snapshot_on 的查詢示例:
SELECT is_read_committed_snapshot_on FROM sys.databases WHERE name='YourSonarQubeDatabase';
更新 is_read_committed_snapshot_on 的查詢示例:
ALTER DATABASE YourSonarQubeDatabase SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
要使用集成安全性:
如果您從命令提示符運(yùn)行 SonarQube 服務(wù)器,則運(yùn)行命令提示符的用戶應(yīng)具有 db_owner 數(shù)據(jù)庫角色成員資格。
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar;integratedSecurity=true
要使用 SQL 身份驗(yàn)證,請(qǐng)使用以下連接字符串。 還要確保 sonar.jdbc.username 和 sonar.jdbc.password 設(shè)置正確:
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar
sonar.jdbc.username=sonarqube
sonar.jdbc.password=mypassword
Oracle
如果在同一個(gè) Oracle 實(shí)例上有兩個(gè) SonarQube 模式,特別是如果它們用于兩個(gè)不同的版本,SonarQube 會(huì)感到困惑并選擇它找到的第一個(gè)。 為了避免這個(gè)問題:
Oracle JDBC 驅(qū)動(dòng)程序版本 12.1.0.1 和 12.1.0.2 存在重大錯(cuò)誤,不建議與 SonarQube 一起使用(查看更多詳細(xì)信息)。
PostgreSQL
如果您想使用自定義架構(gòu)而不是默認(rèn)的“公共”架構(gòu),則必須設(shè)置 PostgreSQL search_path 屬性:
ALTER USER mySonarUser SET search_path to mySonarQubeSchema
首先,檢查要求。 然后下載并解壓縮發(fā)行版(不要解壓縮到以數(shù)字開頭的目錄)。
SonarQube 不能在基于 Unix 的系統(tǒng)上以 root 身份運(yùn)行,因此如有必要,請(qǐng)為 SonarQube 創(chuàng)建一個(gè)專用用戶帳戶。
$SONARQUBE-HOME(如下)指的是 SonarQube 發(fā)行版解壓后的目錄路徑。
編輯 $SONARQUBE-HOME/conf/sonar.properties 以配置數(shù)據(jù)庫設(shè)置。 模板可用于每個(gè)受支持的數(shù)據(jù)庫。 只需取消注釋并配置您需要的模板并注釋掉專用于 H2 的行:
Example for PostgreSQL
sonar.jdbc.username=sonarqube
sonar.jdbc.password=mypassword
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
已提供支持的數(shù)據(jù)庫(Oracle 除外)的驅(qū)動(dòng)程序。 不要更換提供的驅(qū)動(dòng)程序; 他們是唯一支持的。
對(duì)于 Oracle,將 JDBC 驅(qū)動(dòng)程序復(fù)制到 $SONARQUBE-HOME/extensions/jdbc-driver/oracle。
默認(rèn)情況下,Elasticsearch 數(shù)據(jù)存儲(chǔ)在 $SONARQUBE-HOME/data 中,但不建議將其用于生產(chǎn)實(shí)例。 相反,您應(yīng)該將此數(shù)據(jù)存儲(chǔ)在其他地方,最好是在具有快速 I/O 的專用卷中。 除了保持可接受的性能外,這樣做還可以簡化 SonarQube 的升級(jí)。
編輯 $SONARQUBE-HOME/conf/sonar.properties 以配置以下設(shè)置:
sonar.path.data=/var/sonarqube/data
sonar.path.temp=/var/sonarqube/temp
用于啟動(dòng) SonarQube 的用戶必須對(duì)這些目錄具有讀寫權(quán)限。
默認(rèn)端口為“9000”,上下文路徑為“/”。 這些值可以在 $SONARQUBE-HOME/conf/sonar.properties 中更改:
sonar.web.host=192.168.0.1
sonar.web.port=80
sonar.web.context=/sonarqube
執(zhí)行以下腳本來啟動(dòng)服務(wù)器:
如果您的服務(wù)器上安裝了多個(gè) Java 版本,您可能需要明確定義所使用的 Java 版本。
要更改 SonarQube 使用的 Java JVM,請(qǐng)編輯 $SONARQUBE-HOME/conf/wrapper.conf 并更新以下行:
wrapper.java.command=/path/to/my/jdk/bin/java
請(qǐng)按照以下步驟進(jìn)行首次安裝:
使用以下命令創(chuàng)建卷:
$> docker volume create --name sonarqube_data
$> docker volume create --name sonarqube_logs
$> docker volume create --name sonarqube_extensions
確保您使用的是上述命令所示的卷,而不是綁定掛載。 使用綁定安裝會(huì)阻止插件正確填充。
a. 使用嵌入式 H2 數(shù)據(jù)庫啟動(dòng) SonarQube 容器:
$ docker run --rm \
-p 9000:9000 \
-v sonarqube_extensions:/opt/sonarqube/extensions \
b. 一旦 SonarQube 正常啟動(dòng)就退出。
c. 將 Oracle JDBC 驅(qū)動(dòng)程序復(fù)制到 sonarqube_extensions/jdbc-driver/oracle。
3. 使用 -e 環(huán)境變量標(biāo)志定義的數(shù)據(jù)庫屬性運(yùn)行映像:
$> docker run -d --name sonarqube \
-p 9000:9000 \
-e SONAR_JDBC_URL=... \
-e SONAR_JDBC_USERNAME=... \
-e SONAR_JDBC_PASSWORD=... \
-v sonarqube_data:/opt/sonarqube/data \
-v sonarqube_extensions:/opt/sonarqube/extensions \
-v sonarqube_logs:/opt/sonarqube/logs \
有關(guān)更多配置環(huán)境變量,請(qǐng)參閱 Docker 環(huán)境變量。
環(huán)境變量 SONARQUBE_JDBC_USERNAME、SONARQUBE_JDBC_PASSWORD 和 SONARQUBE_JDBC_URL 的使用已被棄用,并將在未來版本中停止使用。
如果您使用 Docker Compose,請(qǐng)?jiān)谂渲?.yml 文件時(shí)使用以下示例作為參考。 單擊下面的標(biāo)題以展開 .yml 文件。
下面的示例將使用最新版本的 SonarQube Docker 映像。 如果要使用 SonarQube 的 LTS 版本,您需要使用 sonarqube:lts-community 圖像標(biāo)簽更新示例。
安裝并運(yùn)行服務(wù)器后,您可能還需要安裝插件。 然后您就可以開始分析源代碼了。
仔細(xì)檢查 $SONARQUBE_HOME/conf/sonar.properties 中的代理設(shè)置是否正確設(shè)置。 請(qǐng)注意,如果您的代理用戶名包含反斜杠,則應(yīng)將其轉(zhuǎn)義 - 例如文件中的用戶名“域\用戶”應(yīng)如下所示:
http.proxyUser=domain\\user
對(duì)于某些代理,異常“java.net.ProtocolException: Server redirected too many times”可能意味著配置了不正確的用戶名或密碼。
SonarQube 啟動(dòng)一個(gè) Elasticsearch 進(jìn)程,并且運(yùn)行 SonarQube 本身的帳戶將用于 Elasticsearch 進(jìn)程。 由于 Elasticsearch 不能以 root 身份運(yùn)行,這意味著 SonarQube 也不能。 您必須選擇其他非 root 帳戶來運(yùn)行 SonarQube,最好是專用于此目的的帳戶。
在向 DevOps 平臺(tái)報(bào)告 Quality Gate 狀態(tài)時(shí),SonarQube 使用 30 秒的 DNS 緩存生存時(shí)間策略。 如有必要,您可以在 JVM 中更改此設(shè)置:
echo "networkaddress.cache.ttl=5" >> "${JAVA_HOME}/conf/security/java.security"
請(qǐng)注意,低值會(huì)增加 DNS 欺騙攻擊的風(fēng)險(xiǎn)。
京ICP備09015132號(hào)-996 | 違法和不良信息舉報(bào)電話:4006561155
© Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號(hào)豪柏大廈C2座11層1105室
北京哲想軟件集團(tuán)旗下網(wǎng)站:哲想軟件 | 哲想動(dòng)畫