【问题标题】:How to simultaneously deploy Node.js web app on multiple servers with Jenkins?如何使用 Jenkins 在多台服务器上同时部署 Node.js Web 应用程序?
【发布时间】:2013-12-01 08:59:24
【问题描述】:

我要在两个远程服务器上部署一个 Node.js 移动 Web 应用程序。(Linux 操作系统) 我正在使用 SVN 服务器来管理我的项目源代码。

为了简单明了地管理应用程序,我决定使用 Jenkins。 我是 Jenkins 新手,所以安装和配置 Jenkins 是一项非常困难的任务。

但我找不到如何设置 Jenkins 以同时构建远程服务器。

你能帮帮我吗?

【问题讨论】:

    标签: node.js jenkins


    【解决方案1】:

    您应该查看supervisor。它与语言和应用程序类型无关,它只负责(重新)启动应用程序。

    所以在你的詹金斯构建中:

    • 您从 SVN 更新您的代码
    • 您运行单元测试(绝对是个好主意)
    • 您可以在每个主机上启动 svn 更新或将当前内容复制到它们(我建议这样做,因为有很多方法可以使 SVN 失败,这允许在某些 .JS 文件中包含 SVN_REVISION)
    • 您在每台主机上执行:fuser -k -n tcp $DAEMON_PORT,这将终止当前运行的应用程序,其端口为 $DAEMON_PORT(您在 node.js 的应用程序中使用的那个)

    最好的显然是它会在系统启动时自动启动你的node.js(前提是正确安装了supervisor(Debian上的apt-get install supervisor))并在失败时重新启动它。

    node.js supervisord 的子配置如下所示:

    # /etc/supervisor/conf.d/my-node-app.conf
    [program:my-node-app]
    user = running-user
    environment = NODE_ENV=production
    directory = /usr/local/share/dir_app
    command = node app.js
    stderr_logfile = /var/log/supervisor/my-node-app-stderr.log
    stdout_logfile = /var/log/supervisor/my-node-app-stdout.log
    

    有很多configuration parameters

    注意:有一个node.js的supervisor,不是我说的那个,我没有测试过。

    【讨论】:

      【解决方案2】:

      对于每个 Linux 操作系统,您需要 ssh 到您的主机以运行命令来更新应用程序:

      1. 在 shell 脚本中制定应用程序更新的工作流程。特别是您需要守护您的节点应用程序,以便完成的詹金斯作业执行不会在退出时杀死您的应用程序。这是一篇很好的文章来告诉你如何做到这一点:Running node.js Apps With Upstart,或者你可以参考纯 nodejs 技术,比如forever。假设您在/etc/init.d/myNodeApp

      2. 下编写了一个脚本
      3. 从 jenkins SSH 到您的 Linux 操作系统。所以您需要确保 ssh 私钥文件已复制到 /var/lib/jenkins/.ssh/id_rsa 并拥有 jenkins 用户的所有权

      这是 jenkins 作业配置中的示例 shell 步骤:

      ssh <your application ip> "service myNodeApp stop; cd /ur/app/dir; svn update; service myNodeApp restart"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 2019-01-03
        • 2020-07-10
        相关资源
        最近更新 更多