Ansible 安装部署sonarqube - 实践

基于 Ansible + Docker 部署 SonarQube 9.9.8 LTS 的完整项目结构和代码,目标是实现环境标准化、可重复部署、配置清晰、易于维护。

项目结构

sonarqube-ansible-docker/
├── ansible.cfg
├── inventory/
│   └── hosts.ini
├── group_vars/
│   └── all.yml
├── roles/
│   └── sonarqube/
│       ├── tasks/
│       │   ├── main.yml
│       │   └── install_docker.yml
│       ├── templates/
│       │   ├── docker-compose.yml.j2
│       │   └── daemon.json.j2
│       ├── handlers/
│       │   └── main.yml
│       └── defaults/
│           └── main.yml
├── playbooks/
│   └── deploy-sonarqube.yml
└── README.md

Ansible 项目的结构与职责分工

ansible.cfg

作用:Ansible 的全局配置文件。相当于 Ansible 的“启动设置中心”。

指定默认 inventory 文件路径(如 inventory/hosts.ini);设置 roles 搜索路径(roles_path = roles);关闭 SSH 主机密钥检查(host_key_checking = False)以避免首次连接提示;

inventory/

存放目标主机清单(Inventory)。告诉 Ansible “在哪几台机器上执行任务”。

inventory/hosts.ini

[sonarqube_servers] 是主机组名;

sonarqube01 是主机别名,ansible_host 指真实 IP,ansible_user 指登录用户;

可扩展为多台服务器实现批量部署。

group_vars/

存放针对主机组的变量定义。提供跨主机共享的配置值。

group_vars/all.yml

作用:为所有主机组(all)定义通用变量。

roles/sonarqube/

作用:Ansible 的“角色”(Role),封装了部署 SonarQube 所需的所有逻辑,实现模块化和复用。

roles/sonarqube/defaults/main.yml

作用:定义该角色的默认变量。

包含 SonarQube 版本、数据目录、端口、PostgreSQL 配置、Docker 安装版本、镜像源等;

这些变量可被 group_vars 或命令行覆盖,优先级较低。

roles/sonarqube/tasks/

存放该角色要执行的具体任务(Tasks)。编排整个部署流程的“总指挥”。

main.yml

作用:角色的主任务入口文件。

调用 install_docker.yml 安装 Docker;

创建必要的目录;

渲染 docker-compose.yml 模板;

install_docker.yml

作用:专门负责安装和配置 Docker 的子任务文件。

roles/sonarqube/templates/

存放 Jinja2 模板文件,用于动态生成目标主机上的配置文件。实现配置与代码分离,支持多环境适配。

docker-compose.yml.j2

作用:SonarQube + PostgreSQL 的 Docker Compose 配置模板。

使用变量(如 {{ sonarqube_version }})动态填充镜像、端口、密码、卷挂载路径等;

部署时渲染为实际的 docker-compose.yml 文件。

daemon.json.j2

作用:Docker 守护进程配置模板,用于设置镜像加速器。优化 Docker 性能,适配国内网络环境。

动态插入 registry-mirrors 列表;

部署后写入 /etc/docker/daemon.json,提升镜像拉取速度。

roles/sonarqube/handlers/

存放“处理器”(Handlers),仅在被 notify 触发时执行。

main.yml

作用:定义服务重启等操作。避免不必要的重复重启,提升执行效率。

restart docker:重新加载 daemon 并重启 Docker 服务(用于应用 daemon.json);

restart sonarqube:重新部署容器(用于更新 compose 文件后生效)。

playbooks/

存放 Ansible 剧本(Playbooks),用于编排角色执行。

playbooks/deploy-sonarqube.yml

作用:主部署剧本。用户执行的唯一入口命令:ansible-playbook playbooks/deploy-sonarqube.yml

指定在 sonarqube_servers 主机组上运行;

以 root 权限(become: yes)执行;

应用 sonarqube 角色。

✅:设计原则

模块化 使用 Role 拆分 Docker 安装、服务部署等逻辑

可配置 所有参数通过变量控制,支持环境差异化

幂等性 Ansible 任务天然支持多次执行结果一致

标准化 固定 Docker 版本、使用阿里云源、配置镜像加速

可维护 清晰的目录结构,职责分明,易于扩展

这个结构完全符合 DevOps 中基础设施即代码(IaC)的最佳实践。

项目代码

(阿里云代码托管平台:https://codeup.aliyun.com/

git clone https://codeup.aliyun.com/692080b1e6c3e0425dbdde06/sonarqube-ansible-docker.git

Ansible安装及其配置

安装:

方式一、Ubuntu 22.04上自身有安装pip3,通过pip3直接安装Ansible

pip3 install ansible

方式二、通过官方 PPA 安装最新版 Ansible

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install -y ansible

配置:

设置免密登录,159.75.37.65是目标服务器,设置后验证:ssh ubuntu@159.75.37.65

ssh-copy-id ubuntu@159.75.37.65

安装docker,docker compose并部署sonarqube

ansible-playbook playbooks/deploy-sonarqube.yml

检查部署结果,注意:docker拉取sonarqube 9.9.8 LTS和Postgre镜像耗时较长,预计要35分钟左右,请耐心等待

docker -v
# 应输出:Docker version 24.0.9, build ...
docker compose version
# 应输出:Docker Compose version v2.x.x
curl http://localhost:9000/api/system/status
# 应返回 {"status":"UP", "version":"9.9.8.69886", ...}

posted @ 2025-12-22 20:57  clnchanpin  阅读(29)  评论(0)    收藏  举报