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", ...}

浙公网安备 33010602011771号