【问题标题】:How to run a Jenkins job on multiple virtual servers?如何在多个虚拟服务器上运行 Jenkins 作业?
【发布时间】:2017-06-12 02:34:47
【问题描述】:

我已经在服务器上安装了 Jenkins,默认情况下该作业将只在该服务器上运行。我的要求是我的 Jenkins 如何在多个服务器上运行相同的作业?它如何 ssh 到其他服务器?我是 Jenkins 的新手,请帮忙。基本上我的目标是将应用程序部署到多台服务器上。

【问题讨论】:

    标签: jenkins devops


    【解决方案1】:

    您可以使用任何配置管理工具,如 ansible、chef 或 capistrano 作为 jenkins 工作,以便他们可以使用 jenkins 完成您的工作。您可以在 capistrano 食谱下提及服务器的数量,并且无论何时构建作业,它都会在所有服务器上运行您的任务。

    还有一个类似pssh(parallel ssh)的工具,以防万一你想用ssh。

    【讨论】:

      【解决方案2】:

      Ansible 是最好的方法。 Ansible :

      在安装 Jenkins 的同一台服务器上安装 Ansible

      在主机文件中以一个名称配置多个服务器的详细信息。

      Ansible-playbook 中提及将在所有提及的服务器中执行的作业。

      内部进程:它将通过 ssh 在多个服务器上运行作业 进入它

      在 Jenkins 安装的服务器中使用 shell 脚本并使用 shell 命令以及 ssh username@ip "#cmd" //多个服务器 ip

      【讨论】:

      • 对于 git pull 我们在 Jenkins 中进行设置,如果从“执行 shell”我将尝试执行 ssh username@ip 然后为多个服务器执行其余命令,这将很长。 Jenkins 中是否有任何插件可以通过 ssh 连接到多个服务器?我正在学习 Chef,如果是 Ansible,我可以使用 Chef 吗?
      • 是的,shell 脚本会很长。你应该使用 Ansible/Chef/Puppet(软件配置管理工具)。与 Chef/puppet 相比,Ansible 是最好和最简单的一个(易于理解、文档化、易于实施、最新的一个)。而其他人(厨师/木偶)是客户端-服务器方法,但 Ansible 不是,这是它的巨大优势。
      【解决方案3】:

      您可以使用主从概念。在所有其他机器上安装 jenkins slave,即在您的情况下是其他应用程序服务器。您可以从here 找到更多关于 Jenkins 主从概念的信息。

      然后您可以使用相同的作业在其他应用程序服务器上运行。

      【讨论】:

      • 感谢您的帮助,现在我可以通过添加从属服务器将相同的应用程序部署到多个服务器上。
      【解决方案4】:

      我认为通过使用单个作业和后期构建步骤,您可以部署在多个服务器上。

      如果有任何更正,请告诉我

      【讨论】:

      • Jenkins 将如何通过 ssh 连接到其他服务器以在其他服务器上运行作业。?
      【解决方案5】:

      使用主从概念,您可以在多个从节点上添加 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 提供并行执行。

      【讨论】:

        最近更新 更多