摘要:當我們利用來托管項目時,每次部署項目都要走同樣的流程,敲擊同樣的命令行,尤其的我們的項目更是無法忍受這種重復工作。
當我們利用github來托管項目時,每次部署項目都要走同樣的流程,敲擊同樣的命令行,尤其的我們的node項目更是無法忍受這種重復工作。
那到底有沒有一種可以解放我們雙手,當我們提交代碼后,服務器自動執(zhí)行我們已經制定好的命令行,答案是我們可以利用Github自有的Webhooks。
WebhooksWebhooks是來監(jiān)測你在github上的各種事件,我們可以通過定制它來監(jiān)測一個push事件,每當我們提交代碼時Webhooks會被觸發(fā),這是我們可以通過配置一個HOST POST請求到你所需要的地址。
如何配置找到你在Github上的項目地址上的Setting的Webhooks,如下圖配置:
項目配置編寫執(zhí)行shell命令
在項目根目錄下新建deployed.sh文件,輸入你想在服務器上執(zhí)行的命令行,如:
cd /front/docs/ git pull origin master
編寫執(zhí)行腳本
在項目根目錄下新建deployed.js文件
var http = require("http") var spawn = require("child_process").spawn var createHandler = require("github-webhook-handler") var handler = createHandler({ path: "/pushCode", secret: "12345678" }) http.createServer(function (req, res) { handler(req, res, function (err) { res.statusCode = 404; res.end("no such location") }) }).listen(3000) handler.on("error", function (err) { console.error("Error:", err.message) }) handler.on("push", function (event) { console.log("Received a push event for %s to %s", event.payload.repository.name, event.payload.ref) rumCommand("sh", ["./deployed.sh"], function (txt) { console.log(txt) }) }) function rumCommand(cmd, args, callback) { var child = spawn(cmd, args) var response = "" child.stdout.on("data", function (buffer) { response += buffer.toString() }) child.stdout.on("end", function () { callback(response) }) }nginx配置
執(zhí)行腳本跑在了3000端口,我們服務器對應啟用到 3000 端口
upstream test { server 127.0.0.1:3000; } server { location /pushCode { proxy_pass http://test; proxy_redirect off; } }部署項目
首次部署到服務器時,仍然是需要我們手動執(zhí)行命令git pull項目,當我們在服務器上clone下我們的項目后,在本地嘗試修改下代碼,然后再次提交,可看到后臺的日志
再次查看Webhooks
表示已經自動觸發(fā)了接口,項目自動化部署成功。
管理應用在服務器上執(zhí)行node命令后,當我們離開服務器后,實際上程序進程關閉了,所以我們利用pm2來管理我們的node進程。
在項目根目錄下新建pm2.json
[{ "name": "test", "script": "deployed.js", "env_dev": { "NODE_ENV": "development" }, "env_production": { "NODE_ENV": "production" } }]
把所有的代碼推送上服務器,進入服務器項目目錄,執(zhí)行
// 啟動命令 pm2 start pm2.json // 查看是否啟動 pm2 list // 查看日志 pm2 logs
本文感謝SkyCai提供的思路。原文地址
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97129.html
摘要:簡介我們在部署我們的應用時我們一般會尋求一些云平臺服務器部署當然也可以直接在服務器里拉取遠程倉庫的代碼當然我們也可以實現通過鉤子來實現服務器與遠程倉庫代碼的同步這樣一來我們在本地提交功能分支到倉庫中倉庫也會同步到服務器這樣我們就無需自己手動 簡介 我們在部署我們的web應用時 我們一般會尋求一些云平臺服務器部署 當然也可以直接在服務器里拉取遠程倉庫的代碼 當然我們也可以實現通過Webh...
摘要:使用框架實現自動部署項目為了方便開發(fā)測試或項目部署至服務器不那么繁瑣,搞一個自動部署的小輪子也是必要的。同時配置項目托管平臺的個人私鑰或項目公鑰,保證能直接拉取。 gohook Python 使用 Tornado 框架實現 WebHook 自動部署 Git 項目 為了方便開發(fā)測試或項目部署至服務器不那么繁瑣,搞一個自動部署的小輪子也是必要的。 小輪子需要涉及到 Coding 項目托管平...
摘要:的設計模式的設計模式以持續(xù)集成持續(xù)測試持續(xù)交付和持續(xù)部署為中心,自動化協作和持續(xù)監(jiān)控是中使用的一些其他設計模式。持續(xù)集成持續(xù)集成是不斷地將源代碼集成到一個新的構建或發(fā)布的過程,源代碼可以在本地存儲中,也可以在或中。 showImg(https://segmentfault.com/img/remote/1460000010452455); 識別二維碼報名活動 8月19日,來自微軟、數人...
摘要:單元測試一個合格的庫應該包含完整的單元測試。是的支持版,和是一樣的,它能夠直接運行為后綴的單元測試文件。在目錄下加入然后執(zhí)行即可看到單元測試結果。 這篇文章主要是講述如何使用 TypeScript 編寫一個完善,包含測試、文檔、持續(xù)集成的庫,涵蓋了編寫整個庫所需要的技術和工具,主要涵蓋: 項目目錄骨架 TypeScript 配置 使用 jest 單元測試 使用 vuepress 編寫...
閱讀 3603·2021-11-24 10:25
閱讀 2508·2021-11-24 09:38
閱讀 1217·2021-09-08 10:41
閱讀 2903·2021-09-01 10:42
閱讀 2569·2021-07-25 21:37
閱讀 1981·2019-08-30 15:56
閱讀 914·2019-08-30 15:55
閱讀 2749·2019-08-30 15:54