亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Github托管項(xiàng)目實(shí)現(xiàn)自動(dòng)化部署

phodal / 2344人閱讀

摘要:當(dāng)我們利用來(lái)托管項(xiàng)目時(shí),每次部署項(xiàng)目都要走同樣的流程,敲擊同樣的命令行,尤其的我們的項(xiàng)目更是無(wú)法忍受這種重復(fù)工作。

當(dāng)我們利用github來(lái)托管項(xiàng)目時(shí),每次部署項(xiàng)目都要走同樣的流程,敲擊同樣的命令行,尤其的我們的node項(xiàng)目更是無(wú)法忍受這種重復(fù)工作。

那到底有沒(méi)有一種可以解放我們雙手,當(dāng)我們提交代碼后,服務(wù)器自動(dòng)執(zhí)行我們已經(jīng)制定好的命令行,答案是我們可以利用Github自有的Webhooks

Webhooks

Webhooks是來(lái)監(jiān)測(cè)你在github上的各種事件,我們可以通過(guò)定制它來(lái)監(jiān)測(cè)一個(gè)push事件,每當(dāng)我們提交代碼時(shí)Webhooks會(huì)被觸發(fā),這是我們可以通過(guò)配置一個(gè)HOST POST請(qǐng)求到你所需要的地址。

如何配置

找到你在Github上的項(xiàng)目地址上的SettingWebhooks,如下圖配置:

項(xiàng)目配置

編寫(xiě)執(zhí)行shell命令

在項(xiàng)目根目錄下新建deployed.sh文件,輸入你想在服務(wù)器上執(zhí)行的命令行,如:

cd /front/docs/

git pull origin master

編寫(xiě)執(zhí)行腳本

在項(xiàng)目根目錄下新建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ù)器對(duì)應(yīng)啟用到 3000 端口

upstream test {
    server 127.0.0.1:3000;
}

server {

  location /pushCode {
    proxy_pass http://test;
    proxy_redirect off;
  }

}
部署項(xiàng)目

首次部署到服務(wù)器時(shí),仍然是需要我們手動(dòng)執(zhí)行命令git pull項(xiàng)目,當(dāng)我們?cè)诜?wù)器上clone下我們的項(xiàng)目后,在本地嘗試修改下代碼,然后再次提交,可看到后臺(tái)的日志

再次查看Webhooks

表示已經(jīng)自動(dòng)觸發(fā)了接口,項(xiàng)目自動(dòng)化部署成功。

管理應(yīng)用

在服務(wù)器上執(zhí)行node命令后,當(dāng)我們離開(kāi)服務(wù)器后,實(shí)際上程序進(jìn)程關(guān)閉了,所以我們利用pm2來(lái)管理我們的node進(jìn)程。

在項(xiàng)目根目錄下新建pm2.json

[{
  "name": "test",
  "script": "deployed.js",
  "env_dev": {
    "NODE_ENV": "development"
  },
  "env_production": {
    "NODE_ENV": "production"
  }
}]

把所有的代碼推送上服務(wù)器,進(jìn)入服務(wù)器項(xiàng)目目錄,執(zhí)行

// 啟動(dòng)命令
pm2 start pm2.json

// 查看是否啟動(dòng)
pm2 list

// 查看日志
pm2 logs

本文感謝SkyCai提供的思路。原文地址

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/97129.html

相關(guān)文章

  • GitLab [Webhooks] 實(shí)現(xiàn)動(dòng)化服務(wù)器部署

    摘要:簡(jiǎn)介我們?cè)诓渴鹞覀兊膽?yīng)用時(shí)我們一般會(huì)尋求一些云平臺(tái)服務(wù)器部署當(dāng)然也可以直接在服務(wù)器里拉取遠(yuǎn)程倉(cāng)庫(kù)的代碼當(dāng)然我們也可以實(shí)現(xiàn)通過(guò)鉤子來(lái)實(shí)現(xiàn)服務(wù)器與遠(yuǎn)程倉(cāng)庫(kù)代碼的同步這樣一來(lái)我們?cè)诒镜靥峤还δ芊种У絺}(cāng)庫(kù)中倉(cāng)庫(kù)也會(huì)同步到服務(wù)器這樣我們就無(wú)需自己手動(dòng) 簡(jiǎn)介 我們?cè)诓渴鹞覀兊膚eb應(yīng)用時(shí) 我們一般會(huì)尋求一些云平臺(tái)服務(wù)器部署 當(dāng)然也可以直接在服務(wù)器里拉取遠(yuǎn)程倉(cāng)庫(kù)的代碼 當(dāng)然我們也可以實(shí)現(xiàn)通過(guò)Webh...

    roadtogeek 評(píng)論0 收藏0
  • Python 使用 Tornado 框架實(shí)現(xiàn) WebHook 自動(dòng)部署 Git 項(xiàng)目

    摘要:使用框架實(shí)現(xiàn)自動(dòng)部署項(xiàng)目為了方便開(kāi)發(fā)測(cè)試或項(xiàng)目部署至服務(wù)器不那么繁瑣,搞一個(gè)自動(dòng)部署的小輪子也是必要的。同時(shí)配置項(xiàng)目托管平臺(tái)的個(gè)人私鑰或項(xiàng)目公鑰,保證能直接拉取。 gohook Python 使用 Tornado 框架實(shí)現(xiàn) WebHook 自動(dòng)部署 Git 項(xiàng)目 為了方便開(kāi)發(fā)測(cè)試或項(xiàng)目部署至服務(wù)器不那么繁瑣,搞一個(gè)自動(dòng)部署的小輪子也是必要的。 小輪子需要涉及到 Coding 項(xiàng)目托管平...

    notebin 評(píng)論0 收藏0
  • 優(yōu)勢(shì)+工具+實(shí)踐=DevOps&Docker的企業(yè)級(jí)落地

    摘要:的設(shè)計(jì)模式的設(shè)計(jì)模式以持續(xù)集成持續(xù)測(cè)試持續(xù)交付和持續(xù)部署為中心,自動(dòng)化協(xié)作和持續(xù)監(jiān)控是中使用的一些其他設(shè)計(jì)模式。持續(xù)集成持續(xù)集成是不斷地將源代碼集成到一個(gè)新的構(gòu)建或發(fā)布的過(guò)程,源代碼可以在本地存儲(chǔ)中,也可以在或中。 showImg(https://segmentfault.com/img/remote/1460000010452455); 識(shí)別二維碼報(bào)名活動(dòng) 8月19日,來(lái)自微軟、數(shù)人...

    stormjun 評(píng)論0 收藏0
  • 使用 TypeScript 編寫(xiě)一個(gè)完善包含測(cè)試、文檔和持續(xù)集成的庫(kù)

    摘要:?jiǎn)卧獪y(cè)試一個(gè)合格的庫(kù)應(yīng)該包含完整的單元測(cè)試。是的支持版,和是一樣的,它能夠直接運(yùn)行為后綴的單元測(cè)試文件。在目錄下加入然后執(zhí)行即可看到單元測(cè)試結(jié)果。 這篇文章主要是講述如何使用 TypeScript 編寫(xiě)一個(gè)完善,包含測(cè)試、文檔、持續(xù)集成的庫(kù),涵蓋了編寫(xiě)整個(gè)庫(kù)所需要的技術(shù)和工具,主要涵蓋: 項(xiàng)目目錄骨架 TypeScript 配置 使用 jest 單元測(cè)試 使用 vuepress 編寫(xiě)...

    lingdududu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<