我正在使用Ansible来部署Java Web应用程序。部署是安静的基础,通过Ansible运行Jenkins手册,将jar文件复制到2个独立的应用服务器,称为node-01a和node-01b,都在Amazon AWS负载均衡器后面。
目前,部署同时在node-01a和node-01b上进行。如果没有两个节点同时关闭,那么最简单的方法是什么?
答案 0 :(得分:2)
您可以使用serial
参数完成任务。见documentation。这是每场比赛。
您还可以指定'并行度'在playbook级别使用命令行参数--forks=FORKS
。
可能与您无关,但为了完整性,我也quote that:
任务按顺序执行,一次一个,针对所有计算机 在进入下一个任务之前,与主机模式匹配。
答案 1 :(得分:2)
我更喜欢使用Ansible playbook中的标签逐个区域地运行滚动更新。您应该始终将ELB服务器放在多个区域中,因此使用该主体是一个好主意。
对于任何一台服务器,假设您有两个标签 - 应用程序(应用程序:SuperApp作为示例)和AvailabilityZone(AvailabilityZone:us-east-1a,AvailabilityZone:us-east-1d作为示例)。我这样做是为了确保我只在两个Application都设置为SuperApp时运行我的脚本,并且在脚本运行时将AvailabilityZone设置为适当的区域。
这允许我在使用ec2.py库存脚本时使用名为'doCoolStuff.yaml'的包含脚本:
- hosts: tag_Application_SuperApp:&tag_AvailabilityZone_us-east-1a
gather_facts: False
roles:
- doCoolStuffRole
tasks:
- include: doCoolStuff.yaml
- hosts: tag_Application_SuperApp:&tag_AvailabilityZone_us-east-1d
gather_facts: False
roles:
- doCoolStuffRole
tasks:
- include: doCoolStuff.yaml
当然,你需要在doCoolStuffRole角色和doCoolStuff.yaml包含脚本中做更多的事情,但整个过程包含在上面。