You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何并行运行不同Ansible Play,实现多主机组分批次部署?

实现Ansible多主机组并行部署且每组遵循先1台再全量的策略

我明白你的需求:你想让abc-servers和xyz-servers两组同时并行执行各自的部署流程——每组都先部署1台主机验证,成功后再批量部署剩余所有主机,而不是像原来那样串行等待,也不能合并组后打乱每组的部署节奏。

为什么合并主机组的方案行不通?

当你把两个组合并成abc-servers:xyz-servers时,serial规则是作用于整个合并后的主机池的。这就会出现你遇到的问题:只要任意一组的第一台部署成功,Ansible就会直接启动所有剩余主机(包括另一组的全部主机)的部署,完全破坏了你想要的每组独立的"先1台再全量"的逻辑。

解决方案:拆分Playbook+异步并行执行

我们可以把两个组的部署逻辑拆成独立的子Playbook,然后通过主Playbook异步启动这两个子任务,让它们并行运行,同时各自保留原有的serial规则。

步骤1:拆分出两个子Playbook

创建abc_deploy.yml,内容如下:

- hosts: abc-servers
  serial:
    - 1
    - "100%"
  roles:
    - deploy

创建xyz_deploy.yml,内容如下:

- hosts: xyz-servers
  serial:
    - 1
    - "100%"
  roles:
    - deploy

步骤2:编写主Playbook实现并行

创建main_deploy.yml,内容如下:

- name: 异步启动abc组部署任务
  hosts: localhost
  tasks:
    - name: 执行abc组部署Playbook
      command: ansible-playbook -i inventory abc_deploy.yml
      async: 3600  # 设置足够长的超时时间(单位:秒)
      poll: 0       # 立即返回,后台执行任务
      register: abc_deploy_task

- name: 异步启动xyz组部署任务
  hosts: localhost
  tasks:
    - name: 执行xyz组部署Playbook
      command: ansible-playbook -i inventory xyz_deploy.yml
      async: 3600
      poll: 0
      register: xyz_deploy_task

- name: 等待两组部署任务全部完成
  hosts: localhost
  tasks:
    - name: 等待abc组部署完成
      async_status:
        jid: "{{ abc_deploy_task.ansible_job_id }}"
      register: abc_result
      until: abc_result.finished
      retries: 360  # 重试次数(每次间隔10秒,总时长360*10=3600秒)
      delay: 10

    - name: 等待xyz组部署完成
      async_status:
        jid: "{{ xyz_deploy_task.ansible_job_id }}"
      register: xyz_result
      until: xyz_result.finished
      retries: 360
      delay: 10

步骤3:执行主Playbook

运行命令:

ansible-playbook -i inventory main_deploy.yml

关键说明

  • async: 3600和poll: 0的组合会让子Playbook在后台异步执行,主Playbook不会等待它完成,直接继续执行下一个任务,从而实现两组部署的并行。
  • 最后的async_status任务会轮询等待两个异步任务完成,确保整个部署流程在两组都成功结束后才标记完成。
  • 请根据你的实际部署时长调整async、retries和delay的数值,避免超时或等待过久。

内容的提问来源于stack exchange,提问作者giraffe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:16:35