如何在Sonarqube docker镜像中跨容器调用保持配置和分析

Van*_*gaS 5 docker sonarqube sonarqube-ops

Sonarqube官方docker镜像,不会持续任何配置更改,如:creating users, changing root password or even installing new plugins.

重新启动容器后,所有配置更改都将消失,安装的插件将丢失.重启后,即使项目的密钥及其先前的QA分析数据也不可用.

使用Sonarqube的官方码头图像时,我们如何保留数据?

Van*_*gaS 12

  • Sonarqube映像带有一个临时的h2数据库引擎,不建议用于生产,并且不会在容器重启时持续存在.
  • 我们需要设置一个我们自己的数据库,并在启动容器时将其指向Sonarqube.
  • "$SONARQUBE_HOME/data", "$SONARQUBE_HOME/extensions"Sonarqube Dockerfile看,Sonarqube docker图像显示两个卷.

由于我们希望在调用之间保留数据,因此我们需要确保生成等级数据库已设置并链接到Sonarqube,并且创建扩展目录并将其作为卷安装在主机上,以便所有下载的插件可用于容器调用,可以由多个容器使用(如果需要).

数据库设置:

create database sonar;
grant all on sonar.* to `sonar`@`%` identified by "SOME_PASSWORD";
flush privileges;

# since we do not know the containers IP before hand, we use '%' for sonarqube host IP.
Run Code Online (Sandbox Code Playgroud)

没有必要创建表,如果没有找到它们,Sonarqube会创建它们.

启动Sonarqube容器:

# create a directory on host
mkdir /server_data/sonarqube/extensions
mkdir /server_data/sonarqube/data # this will be useful in saving startup time

# Start the container
docker run -d \
    --name sonarqube \
    -p 9000:9000 \
    -e SONARQUBE_JDBC_USERNAME=sonar \
    -e SONARQUBE_JDBC_PASSWORD=SOME_PASSWORD \
    -e SONARQUBE_JDBC_URL="jdbc:mysql://HOST_IP_OF_DB_SERVER:PORT/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance" \
    -v /server_data/sonarqube/data:/opt/sonarqube/data \
    -v /server_data/sonarqube/extensions:/opt/sonarqube/extensions \
    sonarqube
Run Code Online (Sandbox Code Playgroud)


Lar*_*ong 6

嗨@VanagaS 和其他人登陆这里。

我只是想提供上述的替代方案。也许有些人甚至会认为它更容易。

请注意该映像的 Dockerfile 中的这一行SONARQUBE_HOMEdocker-sonarqube。我们可以控制这个环境变量。

使用时docker run。只需执行以下操作:

txt docker run -d \ ... ... -e SONARQUBE_HOME=/sonarqube-data -v /PERSISTENT_DISK/sonarqubeVolume:/sonarqube-data

这将使 Sonarqube 创建 conf、data 等文件夹并在其中存储数据。如所须。


或者与Kubernetes. 在您的部署 YAML 文件中。做:

txt ... ... env: - name: SONARQUBE_HOME value: /sonarqube-data ... ... volumeMounts: - name: app-volume mountPath: /sonarqube-data

属性name中的volumeMounts指向volumesKubernetes 部署 YAML 文件部分中的卷。这将再次使 Sonarqube 使用/sonarqube-datamountPath 创建扩展、conf 等文件夹,然后在其中保存数据。

瞧,您的 Sonarqube 数据就这样被持久化了。

我希望这会帮助其他人。

注意,YAML 和 Docker 运行示例并不详尽。他们关注的是 Sonarqube 数据持久化的问题。

  • 如果您仍在评估(即不想设置“真实”数据库),但希望您的数据能够在容器重新启动后继续存在,那么这是一个不错的方法。请注意,较新的 SonarQube 版本似乎忽略了“SONARQUBE_HOME”并尊重“SONAR_PATH_DATA”,参见 [environment-variables](https://docs.sonarqube.org/latest/setup/environment-variables/)(我尝试使用 8.7 社区)版)。谢谢! (3认同)