使用 Docker Compose 方式搭建 SonarQube 服务

您所在的位置:网站首页 sonar使用教程 使用 Docker Compose 方式搭建 SonarQube 服务

使用 Docker Compose 方式搭建 SonarQube 服务

2023-03-28 18:56| 来源: 网络整理| 查看: 265

前言

在 CICD 流水线中,代码质量其实是很关键的一环。SonarQube 是一个「持续代码质量」检测的服务。在 DevOps 持续集成中对把控代码质量很有帮助。

命令行启动

首先以命令行的方式启动,将默认的一些配置拷贝到本地磁盘,比如插键、配置文件等:

1234567mkdir -p /data/sonardocker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube:7.7-communitydocker cp sonarqube:/opt/sonarqube/conf /data/sonardocker cp sonarqube:/opt/sonarqube/extensions /data/sonarwget -P /data/sonar/extensions/plugins https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.27/sonar-l10n-zh-plugin-1.27.jardocker stop sonarqubedocker rm sonarqube

为了对 sonarqube 进行汉化,下载了中文插键。更多的插键下载,可以访问:插键

配置数据库

我使用的是 MySQL 数据库,为了实现权限分离,创建了单独的 sonar 数据库和对应的账号:

1234567#docker exec -it devops-mysql#mysql -u root -pmysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';mysql> FLUSH PRIVILEGES;

数据库我也是用 docker 创建的,可以参考之前的文章使用容器 Docker 创建开发环境。

连接数据库1234567docker run -d --name sonarqube \ -p 9000:9000 \ -e sonar.jdbc.username=root \ -e sonar.jdbc.password=123456 \ -e sonar.jdbc.url="jdbc:mysql://192.168.3.43:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" \ -v /data/sonar/extensions:/opt/sonarqube/extensions \ sonarqube:7.7-community

Use of the environment variables SONARQUBE_JDBC_USERNAME, SONARQUBE_JDBC_PASSWORD and SONARQUBE_JDBC_URL is deprecated, and will stop working in future releases.

网上一些教程还是采用的旧的环境变量,官网已经说快要废弃了。

Compose 方式启动

如果你 MySQL 和 sonarqube 服务是在一个 docker-compose.yml 文件中的话,那么它们默认会处于同一个容器网络中,sonarqube 是可以连接上的。对这块网络知识不了解的,可以查看这个总结:Docker Compose 方式下的容器网络基础知识点

如果是在同一台机器上,MySQL 容器已经创建好了,和 sonarqube 不是同一个 docker-compose.yml 方式创建的,那么,这时候就需要配置,才能让两个容器实现网络互通。

sonarqube 的 docker-compose.yml:

123456789101112131415161718192021222324version: "2.4"services: sonar: image: sonarqube:7.7-community container_name: devops-sonar ports: - "9000:9000" - "9002:9002" volumes: - "/data/sonar/conf:/opt/sonarqube/conf" - "/data/sonar/extensions:/opt/sonarqube/extensions" - "/data/sonar/logs:/opt/sonarqube/logs" - "/data/sonar/data:/opt/sonarqube/data" environment: sonar.jdbc.username: sonar #root管理员用户密码 sonar.jdbc.password: sonar #创建test用户 sonar.jdbc.url: "jdbc:mysql://devops-mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" restart: always networks: - db_netnetworks: db_net: external: true

可以发现,这时候 sonarqube 网络和 MySQL 网络是通的,而且,使用 service name 或者 container name 都可以查询到主机。因此,sonar.jdbc.url 可以配置成:

jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false jdbc:mysql://devops-mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

我们的服务已经正常启动啦:

示例代码

本文的 docker-compose 文件,归档在:awesome-docker-service-for-me



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3