使用NodeJS来自我更新项目

我有一个主要运行在NodeJS上的项目。 在启动过程中,它会创build一个socket.io + http服务器和一些工作人员(主要是在特定事件上完成工作的事件监听器)。

现在我想实现一个工作进程,该进程会自动检查在同一台服务器上通过GitLab托pipe的git仓库中是否有新提交。

所以我想知道:

  • 是否有一个npm模块,可以查找本地和远程git存储库匹配提交?
  • 还是build议使用Redis的Pub / Sub和git钩子来通知应用程序这种方式的更新?
  • 还是有一种完全不同的方法,你会build议?

目前这个项目是作为一个开发服务器运行,我可能会closures自动更新function,一旦它处于生产状态。 但是,因为我在我的笔记本电脑上开发,但在我的远程服务器上testing,自动更新将是方便的。

经过一番研究,我确实find了一个解决scheme,实际上它似乎也起作用。 几乎没有logging和有点bug,但它应该为自我更新的NodeJS应用程序的基本目的工作: http ://registry.npmjs.org/gitlabhook

这是我编码它(直接从我的代码):

var fs=require("fs"); module.exports = function() { // Dynamically write this config. var obj = { tasks: { "*": [ "cd '"+config.base+"'", "git pull", "git submodule update", "npm install", "node lib/updater.js '%m'" ], } }, str = JSON.stringify(obj), glConf = config.base+"/config/gitlabhook.json"; log.info("BIRD3 Autp updater: Generating config to "+glConf); fs.writeFileSync(glConf, str); // Set it up var gitlabhook = require("gitlabhook"), gitlab = gitlabhook({ host: config.host, configFile: "gitlabhook.json", configPathes: [ config.base+"/config" ], logger: log, }); log.info("BIRD3 Auto updater: Starting"); gitlab.listen(); BIRD3.on("update", function(){ setTimeout(function(){ log.info("BIRD3 Auto updater: Exiting to allow update."); process.exit(2); }, 200); }); log.info("BIRD3 Auto Updater -> Online!"); } 

解释:

  • configuration是一个全局对象,存储应用程序特定的东西。 config.base等于主脚本的path。
  • BIRD3是应用程序的名称。
  • BIRD3对象是通过整个应用程序共享的EventEmitter。
  • updater.js发送一个消息到一个redis服务器 – 通过另一半的应用程序,变成一个适当的事件。
  • 我正在生成.json文件,只是因为我即将移动服务器。 为了保持活力,我决定采取这个方法。
  • Gitlabhooks需要单独提供的configuration文件名和目录。 在调用过程中提供任务对象将导致configuration文件不被查找。 该callback接收具有以下布局的对象: https : //gist.github.com/IngwiePhoenix/d08629af01ce93e39e4b

我看到这个模块有很大的潜力,希望能够进一步发展。

但是,如果您还有其他解决scheme,请分享。 我相信其他读者可能会觉得这很有用,因为它是连续部署的一个很好的function。