欢迎访问Sonar Source中文网站!
语言选择: ∷ 

SonarQube中如何安装服务器

发布时间:2023-08-16浏览次数:115

概述

本节介绍单节点 SonarQube 实例。

实例组件

SonarQube 实例包含三个组件:

SQ实例组件
  1. SonarQube 服务器运行以下进程:

    • 为 SonarQube 用户界面提供服务的 Web 服务器。

    • 基于Elasticsearch的搜索服务器。

    • 计算引擎负责处理代码分析报告并将其保存在 SonarQube 数据库中。

  2. 数据库存储以下内容:

    • 代码扫描期间生成的代码质量和安全性指标和问题。

    • SonarQube 实例配置。

  3. 在构建或持续集成服务器上运行的一台或多台扫描仪来分析项目。

主机和位置

为了获得最佳性能,SonarQube 服务器和数据库应安装在单独的主机上,并且服务器主机应是专用的。服务器和数据库主机应位于同一网络。

所有主机必须时间同步。

安装数据库

 支持多种外部 数据库引擎。请务必遵循为您的数据库列出的要求。它们是真正的要求而不是建议。

创建一个空架构和一个 sonarqube 用户。授予此 用户 对此架构 的、 和 对象的sonarqube 权限 。createupdatedelete

微软SQL服务器






甲骨文

PostgreSQL


从 ZIP 文件安装 SonarQube

首先,检查 要求然后下载并解压该 发行版 (不要解压到以数字开头的目录中)。

SonarQube 无法在基于 Unix 的系统上运行 root ,因此如有必要,请为 SonarQube 创建专用用户帐户。

<SONARQUBE_HOME>(如下)指的是 SonarQube 发行版解压目录的路径。

设置对数据库的访问

编辑 <SONARQUBE_HOME>/conf/sonar.properties 以配置数据库设置。每个支持的数据库都可以使用模板。只需取消注释并配置您需要的模板,并注释掉专用于 H2 的行:

Example for PostgreSQLsonar.jdbc.username=sonarqubesonar.jdbc.password=mypasswordsonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

添加 JDBC 驱动程序

已提供支持的数据库(Oracle 除外)的驱动程序。请勿更换提供的驱动程序;他们是唯一受到支持的人。

对于 Oracle,将 JDBC 驱动程序复制到 <SONARQUBE_HOME>/extensions/jdbc-driver/oracle.

配置Elasticsearch存储路径

默认情况下,Elasticsearch 数据存储在 中 <SONARQUBE_HOME>/data,但不建议在生产实例中这样做。相反,您应该将此数据存储在其他地方,最好是具有快速 I/O 的专用卷中。除了保持可接受的性能之外,这样做还可以简化 SonarQube 的升级。

编辑 <SONARQUBE_HOME>/conf/sonar.properties以配置以下设置:

sonar.path.data=/var/sonarqube/datasonar.path.temp=/var/sonarqube/temp

用于启动 SonarQube 的用户必须对这些目录具有读写访问权限。

启动网络服务器

默认端口是9000,上下文路径是/这些值可以在以下位置更改 <SONARQUBE_HOME>/conf/sonar.properties

sonar.web.host=192.168.0.1sonar.web.port=80sonar.web.context=/sonarqube

执行以下脚本启动服务器:

  • 在 Linux 上:<SONARQUBE_HOME>/bin/linux-x86-64/sonar.sh start

  • 在 macOS 上:<SONARQUBE_HOME>/bin/macosx-universal-64/sonar.sh start

  • 在 Windows 上:<SONARQUBE_HOME>/bin/windows-x86-64/StartSonar.bat

您现在可以通过http://localhost:9000浏览 SonarQube (默认系统管理员凭据是 adminadmin)。

调整 Java 安装

默认情况下,脚本将使用 PATH 中可用的 Java 可执行文件。如果您的服务器上安装了多个版本的 Java,您可能需要显式定义使用哪个版本的 Java。

可以通过设置环境变量来覆盖默认的 Java 可执行文件SONAR_JAVA_PATH

Linux

视窗

高级安装功能

  • 在Windows 或 Linux上将 SonarQube 作为服务运行 

  • 在代理后面运行 SonarQube 

  • 监控和调整 Java进程内存

从 Docker 镜像安装 SonarQube

SonarQube docker 镜像支持在amd64架构和arm64基于 Apple Silicon 上运行。

我们建议使用Docker Engine 20.10 及更高版本。

请按照以下步骤进行首次安装:

  1. 创建以下卷有助于防止更新到新版本或升级到更高版本时丢失信息:

    • sonarqube_data:包含数据文件,例如嵌入式H2数据库和Elasticsearch索引

    • sonarqube_logs:包含有关访问、Web 进程、CE 进程和 Elasticsearch 的 SonarQube 日志

    • sonarqube_extensions:将包含您安装的所有插件以及 Oracle JDBC 驱动程序(如果需要)。

使用以下命令创建卷: 

$> docker volume create --name sonarqube_data$> docker volume create --name sonarqube_logs$> docker volume create --name sonarqube_extensions

确保您使用的  是上述命令所示的 卷,而不是绑定安装使用绑定安装会阻止插件正确填充。

已提供支持的数据库(Oracle 除外)的驱动程序。如果您使用的是 Oracle 数据库,则需要将 JDBC 驱动程序添加到卷 sonar_extensions 。去做这个:

 A。启动带有嵌入式 H2 数据库的 SonarQube 容器:

$ docker run --rm \
    -p 9000:9000 \
    -v sonarqube_extensions:/opt/sonarqube/extensions \
    <image_name>

b. SonarQube 正确启动后退出。

C。将 Oracle JDBC 驱动程序复制到 sonarqube_extensions/jdbc-driver/oracle.

3. 使用环境变量标志定义的数据库属性运行映像-e

$> 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 \
    <image_name>

对于基于 docker 的设置,环境变量会取代随属性提供的所有参数。有关更多详细信息,请参阅 Docker 环境变量。

有关在 Docker 卷中安装和更新 SonarQube 插件的更多信息,请参阅安装插件页面。

Docker Compose 配置示例

  • 除非您打算在运行映像时删除数据库并重新开始,否则请注意不要使用-vto和,在运行ordocker-compose down等命令时要小心无论您是否使用参数,您的数据库卷都不会在 SonarQube 初始启动和关闭之后持续存在。docker system prunedocker volume pruneexternal: true

如果您使用 Docker Compose,请在配置文件时使用以下示例作为参考 .yml 。单击下面的标题以展开文件 .yml 。

下面的示例将使用最新版本的 SonarQube Docker 映像。如果想使用SonarQube的LTS版本,您需要使用图像标签更新示例 sonarqube:lts-community 。

Docker Compose .yml 文件示例

下一步

一旦您的服务器安装并运行,您可能还需要 安装一个插件然后您就可以开始 分析源代码了。

故障排除

无法通过代理连接到市场

仔细检查代理设置是否在 中正确设置 <SONARQUBE_HOME>/conf/sonar.properties请注意,如果您的代理用户名包含反斜杠,则应将其转义;文件中的用户名domain\user应类似于以下示例:

http.proxyUser=domain\\user

对于某些代理,异常java.net.ProtocolException: Server redirected too many times可能意味着配置了不正确的用户名或密码。

异常java.lang.RuntimeException:无法以root身份运行elasticsearch

SonarQube 启动 Elasticsearch 进程,运行 SonarQube 本身的同一帐户将用于 Elasticsearch 进程。由于 Elasticsearch 无法以 root 身份运行,这意味着 SonarQube 也不能以 root 身份运行。您必须选择其他一些非 root 帐户来运行 SonarQube,最好是专用于此目的的帐户。

SonarQube DNS 缓存

当向 DevOps 平台报告 Quality Gate 状态时,SonarQube 使用 30 秒的 DNS 缓存生存时间策略。如有必要,您可以在 JVM 中更改此设置:

echo "networkaddress.cache.ttl=5" >> "${JAVA_HOME}/conf/security/java.security"

请注意,较低的值会增加 DNS 欺骗攻击的风险。

DevOps 平台的自签名证书

当在 DevOps 平台或其他相关工具由自签名证书保护的环境中运行时,需要将 CA 添加到 SonarQube 的 java 信任库中。

在 zip 安装中,系统信任库可以在 中找到 $JAVA_HOME/lib/security/cacerts为了将新证书添加到信任库,您可以使用以下命令作为示例:

keytool -importcert -file $PATH_TO_CERTIFICATE -alias $CERTIFICATE_NAME -keystore /$JAVA_HOME/lib/security/cacerts -storepass changeit -trustcacerts -noprompt

在我们的官方 Docker 镜像中,您可以在 中找到系统信任库 <JAVA_HOME>/lib/security/cacerts为了在此处添加新证书,您可以:

  • 将包含您的证书的现有信任库绑定挂载到 <JAVA_HOME>/lib/security/cacerts.

例子

  • 以与 zip 安装相同的方式导入 CA 证书,但在容器内。

如果您使用官方 Helm Chart 在 Kubernetes 上部署 SonarQube,您可以创建一个包含所需证书的新密钥,并通过以下方式引用:

caCerts:
  enabled: true
  image: adoptopenjdk/openjdk11:alpine
  secret: your-secret


微信扫码微信扫码 关注我们

  • 24小时咨询热线180-210-69380

  • 移动电话180-210-69380

Copyright © 2022 All Rights Reserved. 地址:上海市浦东新区崮山路538号808 苏ICP123456 XML地图