【发布时间】:2013-12-01 08:59:24
【问题描述】:
我要在两个远程服务器上部署一个 Node.js 移动 Web 应用程序。(Linux 操作系统) 我正在使用 SVN 服务器来管理我的项目源代码。
为了简单明了地管理应用程序,我决定使用 Jenkins。 我是 Jenkins 新手,所以安装和配置 Jenkins 是一项非常困难的任务。
但我找不到如何设置 Jenkins 以同时构建远程服务器。
你能帮帮我吗?
【问题讨论】:
我要在两个远程服务器上部署一个 Node.js 移动 Web 应用程序。(Linux 操作系统) 我正在使用 SVN 服务器来管理我的项目源代码。
为了简单明了地管理应用程序,我决定使用 Jenkins。 我是 Jenkins 新手,所以安装和配置 Jenkins 是一项非常困难的任务。
但我找不到如何设置 Jenkins 以同时构建远程服务器。
你能帮帮我吗?
【问题讨论】:
您应该查看supervisor。它与语言和应用程序类型无关,它只负责(重新)启动应用程序。
所以在你的詹金斯构建中:
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
注意:有一个node.js的supervisor,不是我说的那个,我没有测试过。
【讨论】:
对于每个 Linux 操作系统,您需要 ssh 到您的主机以运行命令来更新应用程序:
在 shell 脚本中制定应用程序更新的工作流程。特别是您需要守护您的节点应用程序,以便完成的詹金斯作业执行不会在退出时杀死您的应用程序。这是一篇很好的文章来告诉你如何做到这一点:Running node.js Apps With Upstart,或者你可以参考纯 nodejs 技术,比如forever。假设您在/etc/init.d/myNodeApp
从 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"
【讨论】: