
1) 【一句话结论】
假设部署一个铁路票务系统的Web服务(涉及100台服务器,测试/生产各50台),通过Ansible实现标准化配置、Jenkins实现CI/CD流程自动化、Prometheus实现监控告警闭环,部署效率提升约60%,人为错误率降低约80%,运维人力减少约40%。
2) 【原理/概念讲解】
3) 【对比与适用场景】
| 工具 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Ansible | 配置管理/部署工具 | 无代理、SSH/API通信、playbook驱动 | 批量配置服务器、部署软件、更新配置 | 需确保目标主机可SSH访问,变量管理需规范 |
| Jenkins | CI/CD工具 | Pipeline定义流程、插件扩展、分布式构建 | 持续集成(代码合并)、持续部署(代码上线) | 需配置构建环境、依赖管理,分布式构建需资源规划 |
| Prometheus | 监控告警系统 | 时间序列数据采集、拉模式、告警规则 | 服务状态监控、性能指标分析、告警通知 | 需配置监控目标、告警策略,避免目标过多导致性能问题 |
4) 【示例】
假设部署铁路票务系统的Web服务,环境参数:100台服务器(测试/生产各50台),部署步骤包括安装Nginx、配置数据库连接、启动服务、日志收集。
web_service.yml),使用group_vars区分测试/生产环境变量(如测试环境数据库地址为test_db:3306,生产为prod_db:3306),伪代码:
- name: Install Nginx
apt: name=nginx state=latest
- name: Configure Nginx
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart nginx
- name: Set DB connection
lineinfile: path=/etc/nginx/conf.d/default.conf line='server { ... database: {{ db_address }}:{{ db_port }} ... }'
vars: db_address: "{{ env.db_address }}", db_port: "{{ env.db_port }}"
- name: Start Nginx service
service: name=nginx state=started
Jenkinsfile),触发条件为GitLab合并请求(merge into master),步骤包括拉取代码、执行Ansible playbook、运行单元测试(pytest),成功后部署到测试环境,测试通过后部署到生产。伪代码:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'git pull origin master'
sh 'ansible-playbook -i inventory/web_service.yml'
sh 'pytest tests/ -v'
}
}
stage('Deploy') {
when: success
steps {
sh 'ansible-playbook -i inventory/deploy.yml'
}
}
}
}
nginx_http_requests_total(请求总数)、nginx_status_up(服务状态)、node_cpu_seconds_total(CPU使用率),Grafana设置告警规则(如CPU > 80%时,通过企业微信通知运维,并触发Jenkins回滚)。5) 【面试口播版答案】
“我之前负责过铁路票务系统的自动化部署,通过Ansible、Jenkins、Prometheus实现闭环。比如部署一个Web服务,原来手动配置100台服务器需要2小时,现在用Ansible批量执行,通过playbook统一安装和配置;Jenkins搭建流水线,代码提交后自动触发构建和部署,确保流程高效;Prometheus监控服务状态,实时采集指标并告警,比如CPU过高时自动通知。这样部署效率提升约60%,人为错误率降低约80%,减少了运维人力投入。”
6) 【追问清单】
test_group_vars.yml,生产环境放在prod_group_vars.yml,在inventory中指定不同组(如[test_servers]、[prod_servers])使用不同变量文件,避免硬编码。7) 【常见坑/雷区】
ssh-keygen生成密钥并配置sudo无密码。