我有一个主要在NodeJS上运行的项目。在启动期间,它会创建一个socket.io + http服务器和一些工作者(主要是在特定事件上完成工作的事件监听器)。
现在我想实现一个工作进程,该进程自动检查在同一服务器上通过GitLab托管的git仓库上是否有新的提交。
所以我想知道:
目前这个项目是作为开发服务器运行的,一旦它处于生产状态,我可能会关闭自动更新功能。但是,由于我在笔记本电脑上开发但在远程服务器上进行测试,因此自动更新程序会很方便。
答案 0 :(得分:1)
经过一番研究,我找到了一个解决方案,实际上似乎也有效。几乎没有记录和有点错误 - 但它应该适用于自我更新的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!");
}
解释:
updater.js
向redis服务器发送一条消息 - 该应用程序的另一半被转换为正确的事件。我在这个模块中看到了很多潜力,并希望它能够进一步发展。
但是,如果您有其他解决方案也可以使用,请分享。我确信其他可能会阅读此内容的人会发现它很有用,因为它是持续部署的一个简洁功能。