跳到主要內容

[分享] Node.js server & Github webhook combine

通常 deploy 有許多種方式,最簡單的方式就直接採用 web hook ,特別是在 github 裡面有支援這樣的模式,你只要到

github project  -> setting



就可以看到如下圖所示的方式



當然 github 預設提供了許多不同的 hook 方式給予大家做選擇,不過因為我只會最基本的 web hook ,就選用這個方式來進行吧。

設定 endpoint


web hook 原理就是,

當開發者 push code
web hook 啓動
會觸發某個 endpoint

在 web hook 裡面要設定的欄位就是一個很簡單,可以接收 POST 的 URL。
像這邊,我們可以設定

caesarchi.com/deploy

接著就是伺服器部分的設定了。(可以參考之前的文章起一個 server and route ,或者參考 Node.js 台灣社群協作電子書 )。

從 github 傳遞的訊息


透過 github webhook 他會透過 POST 的方式傳送資料,會帶過來一個名稱為 payload 的變數。
payload 傳送一串 JSON data 過來,因此可以透過 JSON.parse 還原回來原本漂亮的樣子。

裡面會帶來這次 push 上來的 commit, branch, files 等相關資訊,我們可以透過這些資訊來達到自己的目的。

待會將會提到這個部分。

另外如果自己目前沒有任何 server 但是想要測試 github webhook 丟過去的訊息為何!可以考慮使用 requestb.in,觀察 webhook 後收到的資訊。



web hook 的啓動


首先,就是在伺服器端需要新增一個 POST Route ,並且可以執行程式伺服器的 shell 程式 。
在 POST 接收到之後,我們可以透過 Node.js child process 的方式啓動另外一個 shell 指令,進行部署動作。

這邊提供一個簡單的 code pattern.


從上面的程式我們可以看到到,透過 JSON parse 的方式,可以把 github payload 還原回 Object 。接下來都可以直接採取 JS rule 進行判斷,作處理等。

另外透過 child_process 執行 shell 程式,然後進行版本更新,重新啓動 web server 。直接一次到達定位。

後記

透過 JavaScript / Node.js 的方式,可以更快地開發自己想要的模式以及程式,當然這邊還有地方可以精進。

例如這個因為是採用基本的 post 方式,所以會有安全性問題,其實可以加上認證,還有參考 github API 比對 commit 的方式進行認證,這都是方式之一。

相信這樣方便的方式,會讓更多人願意把程式開源,放到 github 這個好用的 code social platform 。

留言

這個網誌中的熱門文章

面試者如何挑戰大工程師時代來臨?

面試者如何挑戰大工程師時代來臨? 全世界都在倡導轉職成為工程師,似乎轉職成為工程師就成為職場的救贖,真的是如此嗎?讓老衲來杠給各位聽。 最近有位好久不見的小朋友,是 2000 年出生的小蔡,對於即將面臨到面對職場的挑戰開始關心起技術,他開始尋找比較適合自己的領域,同時也開始在思考到底為了接下來的就職小蔡該如何準備。 詢問我說是不是可以考慮軟體開發工程師這條路線 對於他的詢問,反而引起我的注意, 這讓我開始思考並映射於最近招募的經驗,軟體開發此領域是不是對於每個人都是可以擔任的職啀,這邊分享一些自己的看法希望對各位有所幫助。 全民工程師這件事情 在全球景氣低迷的狀況下,的確特別在這一年大家會很有感覺萬物齊漲,薪水不漲,薪資就是一直停滯不前。 很多時候,在不同的領域中,會發現整個薪資就算是擔任了管理職務主管你也會面臨到薪資的強大屏障在自己面前。 這個時候, 軟體工程師年薪百萬口號 似乎就成了一種救贖。 好像成為了工程師就可以達到年薪百萬,在家輕鬆工作,不用打卡也不用受到風吹雨淋,隨時想工作就可以工作,每個月又有固定薪水入帳,感受到類財富自由,人生的美好。 如果能夠爭取到跨國公司的職位,這份薪水有可能還可以上看每個月十多萬以上,甚至是往上也是極度有可能的事情,人生美好層次又再度提高了起來。 但這件事情是真的每個人都可以達到嗎? 還是這就是另外一種性存者偏差呢? 亦或者這些人其實是金字塔頂端的小眾? 每份履歷都像是同一種履歷 最近在最近幾年在面試工程師的時候特別會看到許多轉職者,一開始履歷裡面看到相關的作品一開始會覺得十分的驚艷, Wow, 現在的新手就可以做到如此精美的畫面,這些畫面是我當初用 Bootstrap 也做不出來的東西,許多的互動體驗好的一個不行,做出來的頁面配色和對齊也是極致。 但是隨著時間推移,多看了幾封履歷之後,就會發現在各大技術養成學院出來的學生履歷成果內容如出一轍,在面試的過程中也會詢問許多關於框架的底層概念,和比較技術觀念的時候,甚至是許多框架的核心概念,就很容易露出馬腳。 很多面試者會 一問三不知 ,透過許多引導,但殘酷的是連關鍵字是什麼都也無法推敲出來,更不用說在小組裡面到底怎麼樣合作,許多不同線上產品的比較,使用者流程,使用者後面的互動邏輯等,幾乎是風吹一片倒,只能

jQuery, animate function with css exlapenation.

Today, I want to use jQuery making a animation for webpage, First I check animate fuction on ref book. I clearly know how use it, there are two main function for animate. 1. $().animate({ "style1":"value1" , "style2":"value2" }, Time); Time: it can be three type, String => "slow", "fast", "normal". Integer=>10000 2. $().stop(); it can immedaitely stop animation. Let's do some experieces, I bulit a simple page. You can hover UP and DOWN for a article sliding UP or DOWN. Les't do it. HTML CODE: <div id="all"> <div id="up">往上</div> <div id="showTab"> <div id="data"> About This script is intended for forms where the user needs to upload an image to a Web site. The image is displayed on the page for previewing before uploading. The display will be resized if needed so as not to break the page layout. Valid file types are set in the scri

初探 LangChain:語言模型應用程式開發的強大框架

LangChain 是一個強大的框架,致力於幫助開發人員利用語言模型構建端到端的應用程式。它提供了一整套工具、組件和接口,大大簡化了創建由大型語言模型(LLM)和聊天模型支持的應用程式的過程。LangChain 可以輕鬆地管理與語言模型的互動,將多個組件連接在一起,並集成額外的資源,例如 API 和資料庫。 LangChain https://python.langchain.com/en/latest/index.html 不說廢話,直接開始試著安裝, pip install langchain pip install openai export OPENAI_API_KEY="..." 以下是一些 LangChain 的簡單程式碼: import os os.environ["OPENAI_API_KEY"] = "..." from langchain.llms import OpenAI from langchain import OpenAI, ConversationChain from langchain.agents import initialize_agent from langchain.agents import load_tools from langchain.chains import LLMChain from langchain.prompts import PromptTemplate prompt = PromptTemplate( input_variables=["product"], template="What is a good name for a company that makes {product}?", ) print(prompt.format(product="colorful socks")) # What is a good name for a company that makes colorful socks? 在 LangChain 中,開發人員可以使用 LLM、Chat Model、Agents、Chains、Memory