Ansible剧本怎么批量部署JDK+Tomcat+Jenkins+Nginx?

文章导读
使用 Ansible 批量部署 JDK、Tomcat、Jenkins 和 Nginx 组合,最适合内部测试环境或统一配置的开发机。生产环境建议将服务拆分部署以保证稳定性。
📋 目录
  1. 命令速用版
  2. 前置准备与清单配置
  3. 完整剧本示例 (site.yml)
  4. Nginx 反向代理模板详解
  5. 怎么验证是否生效
  6. 常见坑与排查
  7. 参考来源
A A

使用 Ansible 批量部署 JDK、Tomcat、Jenkins 和 Nginx 组合,最适合内部测试环境或统一配置的开发机。生产环境建议将服务拆分部署以保证稳定性。

先说结论:这套方案能显著减少重复操作,但必须解决端口冲突、依赖顺序及安全权限问题。

  • 适合:内部测试集群、开发环境统一初始化。
  • 核心注意:Jenkins 需配置官方 Yum 源,Tomcat 配置文件路径需动态适配,必须开放防火墙端口。
  • 安全建议:避免直接使用 root 登录,建议配置 sudo 提权(ansible_become)。
  • 验收:检查服务端口监听、防火墙状态及日志报错。

命令速用版

ansible-playbook -i hosts.ini site.yml `--check`
ansible-playbook -i hosts.ini site.yml

第一条命令用于预演检查(Dry Run),确认语法无误且不会意外修改文件;第二条命令执行实际部署。执行前确保控制节点已配置好对目标主机的 SSH 免密登录,且普通用户具备 sudo 权限。

前置准备与清单配置

在 inventory 文件中定义主机组,区分不同角色的变量。注意不要直接使用 root 用户,而是配置普通用户配合提权。

Ansible剧本怎么批量部署JDK+Tomcat+Jenkins+Nginx?
[web_servers]
192.168.1.101
192.168.1.102

[all:vars]
ansible_user=centos
ansible_become=yes
ansible_become_method=sudo
jdk_version=1.8.0
tomcat_http_port=8081
jenkins_http_port=8080

完整剧本示例 (site.yml)

以下是一个整合了 JDK 安装、Jenkins 源配置、Tomcat 端口修改、Nginx 代理及防火墙设置的完整剧本参考。实际使用时需根据操作系统版本(CentOS/Ubuntu)调整包管理器模块。

---
- name: Deploy JDK, Tomcat, Jenkins, Nginx
  hosts: web_servers
  tasks:
    - name: Install JDK
      yum:
        name: java-1.8.0-openjdk
        state: present

    - name: Add Jenkins Repository
      yum_repository:
        name: jenkins
        description: Jenkins Repository
        baseurl: https://pkg.jenkins.io/redhat-stable/jenkins.repo
        gpgcheck: yes
        gpgkey: https://pkg.jenkins.io/redhat-stable/jenkins.key
        state: present

    - name: Install Jenkins
      yum:
        name: jenkins
        state: present
      notify: restart jenkins

    - name: Install Tomcat
      yum:
        name: tomcat
        state: present
      vars:
        tomcat_config_path: /etc/tomcat

    - name: Configure Tomcat Port
      lineinfile:
        path: "{{ tomcat_config_path }}/server.xml"
        regexp: 'port="8080"'
        line: 'port="{{ tomcat_http_port }}"'
      notify: restart tomcat

    - name: Install Nginx
      yum:
        name: nginx
        state: present

    - name: Deploy Nginx Config
      template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/conf.d/app.conf
      notify: reload nginx

    - name: Configure Firewall
      firewalld:
        service: "{{ item }}"
        permanent: yes
        state: enabled
      loop:
        - http
        - https
        - jenkins
      notify: reload firewalld

    - name: Start Services
      systemd:
        name: "{{ item }}"
        state: started
        enabled: yes
      loop:
        - jenkins
        - tomcat
        - nginx

  handlers:
    - name: restart jenkins
      systemd:
        name: jenkins
        state: restarted
    - name: restart tomcat
      systemd:
        name: tomcat
        state: restarted
    - name: reload nginx
      systemd:
        name: nginx
        state: reloaded
    - name: reload firewalld
      systemd:
        name: firewalld
        state: reloaded

Nginx 反向代理模板详解

在剧本同级的 templates 目录下创建 nginx.conf.j2。该配置将不同路径的请求转发到 Jenkins 或 Tomcat 端口。

server {
    listen 80;
    server_name _;

    location /jenkins/ {
        proxy_pass http://127.0.0.1:{{ jenkins_http_port }}/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location / {
        proxy_pass http://127.0.0.1:{{ tomcat_http_port }};
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

怎么验证是否生效

部署完成后,不要只看命令返回的 changed 状态,需登录目标机器进行多维度检查。

  • 检查 Java 版本:java -version,确认输出符合预期。
  • 检查端口监听:ss -tulpn | grep -E '8080|8081|80',确认 Jenkins、Tomcat、Nginx 各自占用了规划好的端口。
  • 检查服务状态:systemctl status jenkins tomcat nginx,确保都是 active (running)。
  • 检查防火墙:firewall-cmd `--list-ports`firewall-cmd `--list-services`,确认相关端口或服务已开放。
  • 访问验证:浏览器访问 Nginx 地址,确认能分别跳转到 Jenkins 登录页和 Tomcat 默认页。

常见坑与排查

  • 端口冲突:Jenkins 和 Tomcat 默认都是 8080,必须在剧本中强制修改其中一个,否则后启动的服务会失败。
  • Jenkins 安装失败:直接 yum install 通常因缺少仓库而失败,必须先配置官方 repo 或下载 rpm 包。
  • 路径差异:Tomcat 配置文件路径因安装方式(yum 源码)不同而异,yum 安装通常在 /etc/tomcat,源码可能在 /opt/tomcat/conf,建议使用变量管理。
  • 权限问题:避免直接使用 root 执行 Ansible,应配置普通用户 sudo 权限。Jenkins 默认运行用户为 jenkins,文件部署时要注意属主归属。
  • 防火墙拦截:服务启动成功但外部无法访问,通常是防火墙未放行端口,需配置 firewalld 或安全组。
  • SELinux 限制:如果开启 SELinux,Nginx 反向代理可能受阻,需调整策略或临时设置为 Permissive 模式测试。

参考来源

  • Ansible 官方文档 - 模块索引:https://docs.ansible.com/ansible/latest/collections/index_module.html
  • Ansible 官方文档 - Playbook 入门:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html
  • OpenJDK 官方文档 - 安装指南:https://openjdk.org/
  • Apache Tomcat 官方文档 - 配置参考:https://tomcat.apache.org/tomcat-9.0-doc/config/
  • Jenkins 官方文档 - 安装手册:https://www.jenkins.io/doc/book/installing/
  • Nginx 官方文档 - 入门指南:https://nginx.org/en/docs/