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

rbpvctlc  于 2023-01-25  发布在  Jenkins
关注(0)|答案(1)|浏览(144)

假设我有一个剧本,看起来像下面这样:

- 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

webghufk

webghufk1#

请特别检查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启动到另一台服务器的新会话,即使任务只完成了一半"。我相信有一种方法可以限制并行运行的次数--如果这是您想要实现的。也许this answer对您会有用处。

相关问题