【发布时间】:2017-06-12 02:34:47
【问题描述】:
我已经在服务器上安装了 Jenkins,默认情况下该作业将只在该服务器上运行。我的要求是我的 Jenkins 如何在多个服务器上运行相同的作业?它如何 ssh 到其他服务器?我是 Jenkins 的新手,请帮忙。基本上我的目标是将应用程序部署到多台服务器上。
【问题讨论】:
我已经在服务器上安装了 Jenkins,默认情况下该作业将只在该服务器上运行。我的要求是我的 Jenkins 如何在多个服务器上运行相同的作业?它如何 ssh 到其他服务器?我是 Jenkins 的新手,请帮忙。基本上我的目标是将应用程序部署到多台服务器上。
【问题讨论】:
您可以使用任何配置管理工具,如 ansible、chef 或 capistrano 作为 jenkins 工作,以便他们可以使用 jenkins 完成您的工作。您可以在 capistrano 食谱下提及服务器的数量,并且无论何时构建作业,它都会在所有服务器上运行您的任务。
还有一个类似pssh(parallel ssh)的工具,以防万一你想用ssh。
【讨论】:
Ansible 是最好的方法。 Ansible :
在安装 Jenkins 的同一台服务器上安装 Ansible。
在主机文件中以一个名称配置多个服务器的详细信息。
在Ansible-playbook 中提及将在所有提及的服务器中执行的作业。
内部进程:它将通过 ssh 在多个服务器上运行作业 进入它
或
在 Jenkins 安装的服务器中使用 shell 脚本并使用 shell 命令以及 ssh username@ip "#cmd" //多个服务器 ip
【讨论】:
您可以使用主从概念。在所有其他机器上安装 jenkins slave,即在您的情况下是其他应用程序服务器。您可以从here 找到更多关于 Jenkins 主从概念的信息。
然后您可以使用相同的作业在其他应用程序服务器上运行。
【讨论】:
我认为通过使用单个作业和后期构建步骤,您可以部署在多个服务器上。
如果有任何更正,请告诉我
【讨论】:
使用主从概念,您可以在多个从节点上添加 Jenkins 从代理,以便在它们上进行部署。
您可以通过两种方式进行部署,使用 Jenkins 节点管道语法,或通过构建脚本使用 Ansible-Playbook:
第一种方式在 Jenkinsfile 中如下所示:
node('node1') {
// Building Stages on node 1
}
node('node2') {
// Building Stages node 2
}
第二种方式在 Jenkinsfile 中如下所示:
node('master_node'){
// master node has the ansible-playbook
ansiblePlaybook credentialsId: 'ansible_ssh_user', inventory: 'path_to_inventory_file', playbook: 'path_to_playbook', sudo: true, sudoUser: 'sudo_user_name'
}
这种方式需要在 Jenkins 主节点上安装 Ansible-plugin。 并且你可以把所有你想要的节点放到Inventory 文件中。
这两种方式的主要区别除了幂等之外,第一种方式提供顺序执行,而第二种方式使用 Ansible 提供并行执行。
【讨论】: