Ansible:如何使SSH会话持久化?

时间:2018-04-23 10:11:14

标签: jenkins ansible

假设我有一个类似于以下内容的剧本:

- 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 playbook,build.yml。 (★Jenkins和Ansible在同一台服务器上)

我想要实现的是在不同的构建服务器之间分配工作负载(Jenkins项目)以加速构建性能(假设有多个构建服务器,但只有单个Jenkins服务器可用)。

e.g。

Jenkins(Project1) - > Ansible - >构建服务器1
Jenkins(Project2) - > Ansible - >构建服务器2
Jenkins(Project3) - > Ansible - >构建服务器3

1 个答案:

答案 0 :(得分:1)

请特别查看ansible.cfg[persistent_connection]

它的内容如下:

# Configures the persistent connection timeout value in seconds.  This value is
# how long the persistent connection will remain idle before it is destroyed.
# If the connection doesn't receive a request before the timeout value
# expires, the connection is shutdown. The default value is 30 seconds.
#connect_timeout = 30

根据它,如果你启用超时值我猜,连接将保持打开(持久)并等待connect_timeout秒的新命令(任务)。把它设定为很有价值的,保证" ansible不会关闭ssh会话。

除此之外,你提到了Ansible initiates a new session to another server even though the tasks are only halfway through。我相信有一种方法可以并行限制运行次数 - 如果这是您想要实现的目标。也许这个answer会对你有用。