經過一番研究,我確實找到了一個解決方案,實際上它似乎也起作用。幾乎沒有記載和有點馬車 - 但它應該自我更新的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!");
}
要解釋:
- 配置是一個全局對象,存儲應用程序特定的東西。 config.base等於主腳本的路徑。
- BIRD3是應用程序的名稱。
- BIRD3對象是通過整個應用程序共享的EventEmitter。
updater.js
向redis服務器發送一條消息 - 通過應用程序的另一半,它將轉換爲適當的事件。
- 我正在生成.json文件,僅僅是因爲我即將移動服務器。爲了保持動態,我決定處理這個問題。
- Gitlabhooks需要單獨提供的配置文件名和目錄。在調用過程中提供任務對象將導致不查找配置文件。回調接收到一個對象,其佈局如下:https://gist.github.com/IngwiePhoenix/d08629af01ce93e39e4b
我看到這個模塊有很大的潛力,並希望它可以進一步發展。
但是,如果您有其他解決方案也可以使用,請分享它。我相信其他可能會閱讀此內容的人會發現它很有用,因爲它是連續部署的一個很好的功能。
我認爲gitlab的web鉤子將非常適合這個。例如,gitlabhook模塊可以監聽鉤子,但是我自己實現這個功能時遇到了一些問題。我自己做了一件非常黑的東西,但會對更合適的解決方案感興趣。 – 2014-09-03 22:51:40
這似乎是一件有趣的事情,但它看起來像釘子嗎?我的意思是,你有使用應用程序自我更新?有很多經過驗證和測試的連續部署工具,不需要增加Node應用程序的複雜性。 – Zlatko 2014-09-05 13:10:12
@Zlatko:我已經看到了一些工具,但從未理解它們是如何工作的。如果我看到一個,它談到自動發佈新版本等......它讓我困惑。所以我尋求一個解決方案,聽起來更像我所需要的 - 可以更新自身並重新啓動的代碼。但是,如果你有一個好的軟件來推薦,那麼我會仔細研究它。 – 2014-09-05 18:03:24