如何在Jenkins上同时在多个服务器上部署Node.js Web应用程序?

我将在两台远程服务器上部署Node.js移动Web应用程序(Linux OS)我正在使用SVN服务器来pipe理我的项目源代码。

为了简单明了地pipe理应用程序,我决定使用Jenkins。 我是Jenkins的新手,因此安装和configurationJenkins是一项相当困难的任务。

但是我找不到如何设置Jenkins来同时构build远程服务器。

你可以帮帮我吗?

你应该看看主pipe 。 这是语言和应用程序types不可知的,它只是照顾(重新)启动应用程序。

所以在你的jenkins身上:

  • 你从SVN更新你的代码
  • 你运行你的unit testing(绝对是个好主意)
  • 你可以在每个主机上启动一个svn更新,或者将当前的内容复制到他们(我build议这样做,因为有很多方法可以使SVN失败,这就允许在一些.JS文件中包含SVN_REVISION)
  • 你在每个主机上执行: fuser -k -n tcp $DAEMON_PORT ,这将杀死当前正在运行的应用程序,端口$​​ DAEMON_PORT(你在node.js的应用程序中使用的那个)

最好的情况是,在系统启动时(提供的pipe理程序被正确安装(Debian上的apt-get install supervisor )),它会自动启动你的node.js,并在出现故障时重新启动它。

node.js supervisord的子configuration如下所示:

 # /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参数 。

注意:有一个node.js的主pipe,这不是我正在谈论的那个,我还没有testing过。

每个Linux操作系统,你需要ssh到你的主机运行命令来获取应用程序更新:

  1. 在shell脚本中制定应用程序更新的工作stream程。 特别是你需要守护你的节点应用程序,这样完成的jenkins作业执行不会在退出时终止你的应用程序。 下面是一篇很好的文章,告诉你如何做到这一点: 使用Upstart运行node.js应用程序 ,或者像永远一样引用纯粹的nodejs技术。 假设你在/etc/init.d/myNodeApp下创build了一个脚本

  2. 从jenkinsSSH到您的Linux操作系统。 所以你需要确保ssh私钥文件已被复制到/var/lib/jenkins/.ssh/id_rsa拥有jenkins用户

以下是jenkins作业configuration中的一个示例shell步骤:

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