摘要:當(dāng)我們利用來托管項目時,每次部署項目都要走同樣的流程,敲擊同樣的命令行,尤其的我們的項目更是無法忍受這種重復(fù)工作。
當(dāng)我們利用github來托管項目時,每次部署項目都要走同樣的流程,敲擊同樣的命令行,尤其的我們的node項目更是無法忍受這種重復(fù)工作。
那到底有沒有一種可以解放我們雙手,當(dāng)我們提交代碼后,服務(wù)器自動執(zhí)行我們已經(jīng)制定好的命令行,答案是我們可以利用Github自有的Webhooks。
WebhooksWebhooks是來監(jiān)測你在github上的各種事件,我們可以通過定制它來監(jiān)測一個push事件,每當(dāng)我們提交代碼時Webhooks會被觸發(fā),這是我們可以通過配置一個HOST POST請求到你所需要的地址。
如何配置找到你在Github上的項目地址上的Setting的Webhooks,如下圖配置:
項目配置編寫執(zhí)行shell命令
在項目根目錄下新建deployed.sh文件,輸入你想在服務(wù)器上執(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端口,我們服務(wù)器對應(yīng)啟用到 3000 端口
upstream test { server 127.0.0.1:3000; } server { location /pushCode { proxy_pass http://test; proxy_redirect off; } }部署項目
首次部署到服務(wù)器時,仍然是需要我們手動執(zhí)行命令git pull項目,當(dāng)我們在服務(wù)器上clone下我們的項目后,在本地嘗試修改下代碼,然后再次提交,可看到后臺的日志
再次查看Webhooks
表示已經(jīng)自動觸發(fā)了接口,項目自動化部署成功。
管理應(yīng)用在服務(wù)器上執(zhí)行node命令后,當(dāng)我們離開服務(wù)器后,實際上程序進程關(guān)閉了,所以我們利用pm2來管理我們的node進程。
在項目根目錄下新建pm2.json
[{ "name": "test", "script": "deployed.js", "env_dev": { "NODE_ENV": "development" }, "env_production": { "NODE_ENV": "production" } }]
把所有的代碼推送上服務(wù)器,進入服務(wù)器項目目錄,執(zhí)行
// 啟動命令 pm2 start pm2.json // 查看是否啟動 pm2 list // 查看日志 pm2 logs
本文感謝SkyCai提供的思路。原文地址
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97129.html
摘要:簡介我們在部署我們的應(yīng)用時我們一般會尋求一些云平臺服務(wù)器部署當(dāng)然也可以直接在服務(wù)器里拉取遠程倉庫的代碼當(dāng)然我們也可以實現(xiàn)通過鉤子來實現(xiàn)服務(wù)器與遠程倉庫代碼的同步這樣一來我們在本地提交功能分支到倉庫中倉庫也會同步到服務(wù)器這樣我們就無需自己手動 簡介 我們在部署我們的web應(yīng)用時 我們一般會尋求一些云平臺服務(wù)器部署 當(dāng)然也可以直接在服務(wù)器里拉取遠程倉庫的代碼 當(dāng)然我們也可以實現(xiàn)通過Webh...
摘要:使用框架實現(xiàn)自動部署項目為了方便開發(fā)測試或項目部署至服務(wù)器不那么繁瑣,搞一個自動部署的小輪子也是必要的。同時配置項目托管平臺的個人私鑰或項目公鑰,保證能直接拉取。 gohook Python 使用 Tornado 框架實現(xiàn) WebHook 自動部署 Git 項目 為了方便開發(fā)測試或項目部署至服務(wù)器不那么繁瑣,搞一個自動部署的小輪子也是必要的。 小輪子需要涉及到 Coding 項目托管平...
摘要:的設(shè)計模式的設(shè)計模式以持續(xù)集成持續(xù)測試持續(xù)交付和持續(xù)部署為中心,自動化協(xié)作和持續(xù)監(jiān)控是中使用的一些其他設(shè)計模式。持續(xù)集成持續(xù)集成是不斷地將源代碼集成到一個新的構(gòu)建或發(fā)布的過程,源代碼可以在本地存儲中,也可以在或中。 showImg(https://segmentfault.com/img/remote/1460000010452455); 識別二維碼報名活動 8月19日,來自微軟、數(shù)人...
摘要:單元測試一個合格的庫應(yīng)該包含完整的單元測試。是的支持版,和是一樣的,它能夠直接運行為后綴的單元測試文件。在目錄下加入然后執(zhí)行即可看到單元測試結(jié)果。 這篇文章主要是講述如何使用 TypeScript 編寫一個完善,包含測試、文檔、持續(xù)集成的庫,涵蓋了編寫整個庫所需要的技術(shù)和工具,主要涵蓋: 項目目錄骨架 TypeScript 配置 使用 jest 單元測試 使用 vuepress 編寫...
閱讀 3621·2021-11-24 10:25
閱讀 2546·2021-11-24 09:38
閱讀 1235·2021-09-08 10:41
閱讀 2919·2021-09-01 10:42
閱讀 2595·2021-07-25 21:37
閱讀 1995·2019-08-30 15:56
閱讀 926·2019-08-30 15:55
閱讀 2759·2019-08-30 15:54