假设我有一个剧本,看起来像下面这样:
- hosts: build-servers
gather_facts: false
roles:
- role: role1
- role: role2
- role: role3
- role: role4
这是根据工作负载级别在连接到负载平衡器的多个构建服务器之一上执行的。
我所面临的问题是,与所选服务器的SSH会话在所有任务完成之前不会持续。即Ansible启动与另一台服务器的新会话,即使任务只完成了一半。
我如何确保Ansible在整个剧本执行完毕之前保持每个会话的持久性?
- 编辑:**
下面是我所遵循的端到端构建工作流。
- Jenkins-〉Ansible-〉构建服务器**
当Jenkins项目启动时,它通过执行ansible-playbook build.yml
来启动Ansible剧本,如上面所示的build.yml。(★ Jenkins和Ansible在同一个服务器上)
我想要实现的是在不同的构建服务器之间分配工作负载(Jenkins项目)以加速构建性能(假设有多个构建服务器,但只有一个Jenkins服务器可用)。
例如:
Jenkins(项目1)-〉Ansible-〉构建服务器1
Jenkins(项目2)-〉Ansible-〉构建服务器2
Jenkins(项目3)-〉Ansible-〉构建服务器3
1条答案
按热度按时间webghufk1#
请特别检查
ansible.cfg
和[persistent_connection]
。该条内容如下:
根据它,如果你启用超时值,我猜,连接将保持开放(持久),并等待新的命令(任务)为
connect_timeout
秒。设置为一个很大的值,你"保证" Ansible不会关闭ssh会话。除此之外,您还提到了"Ansible启动到另一台服务器的新会话,即使任务只完成了一半"。我相信有一种方法可以限制并行运行的次数--如果这是您想要实现的。也许this answer对您会有用处。