2014年2月1日星期六

讓Github幫你管理放在Amazon S3的網站 - 網站更新的自動化部署

用版本控制軟件(Version Control System)來管理網頁並非什麼稀奇的事情,概能容許多人同時修改,又可以追蹤變化,除了這些優點外,配合自動化部署(Auto Deployment)系統更可以自動把內容上傳到網站,大大簡化繁複的部驟,減少出錯的機會。

這裹我會用Tinyboy開源3D打印機計劃的網頁做例子,講解怎樣用Github及Travis-CI來管理網頁的發佈,設定好後絕大部份的發佈工作都可以經Github的介面完成,不用裝FTP,也不用碰網頁服務器,而且所有發佈都有記錄可尋,隨時都能回復(Rollback)到舊版本

理論上以下的框架也可以應用到其他軟件的自動化部署上,需要的是只是按個別需求客制化。

預覽流程


一般來說開發者/設計師都能在自己的電腦內查看及修改網頁內容,不過有時難免會大意弄錯,所以讓其他人檢查及回饋意見也很重要。那些Reviewer卻未必像開發者/設計師般精通技術,可以自已下載最新版的網頁,故此一般都會上傳一個預覽的版本供他們觀看。

把這個過程自動化可以節省不少力氣,不用重覆“修改->上傳”的步驟。





流程
  1. 開發者/設計師利用Git把最近的修訂推到Github
  2. Github會通知Travis-CI進行自動化的部署
  3. 及後Travis-CI再把內容上傳到Amazon S3檔案伺服器,該伺服器提供http://www2.tinyboy.net 預灠網站的內容
  4. Reviewer在不同設備、瀏灠器上查看 http://www2.tinyboy.net
  5. 然後回饋意見給開發者/設計師,讓他們再重新修改

Travis-CI

Travis-CI是一套為Github而設的Continuous Integration(CI)系統,每當收到新的commit就會自動執行測試程序,若成功則進行部署動作,過程中發生任何錯誤都會用電郵告知。 


Amazon S3

S3是Amazon提供的檔案伺服器,功能繁多,包括存放靜態網頁,因為價錢划算加上有API支援,這使得S3很適合用作自動化部署系統的一部份。

以美國東岸N. Virginia計算,少於1TB的情況下,每GB的儲存費用是USD $0.095,流量則是USD $0.12/GB,每1000個請求是USD $0.005,而且使用越多單價越平,加上Amazon經常派Coupon,基本上可以不太花錢就能擺放靜態網頁。 



正式版本的發佈 - Pull Request

預灠版本是為了收集意見及測試之用,過程全自動,並不存在任何審批的流程。但正式版並不一樣,總不能把未檢查的內容向公眾發佈,故除了各位Reviewer外,通常也會有一個至數位Gatekeeper存在,由他們操刀釋放正式版本。

S3並不支援FTP上傳,必須配合專用的工具,這使得Gatekeepr必須懂得使用這些工具,也需共享[密碼],前者要求用戶學習,然後後者又要擔心不小心讓密碼外流,出了事也沒有方法追查成問題所在。

最理想是用戶本身有自己的帳戶,然後上傳又能留下記錄追查,在這些要求下,github是個不錯的選擇。



流程
  1. 當Developer / Designer希望發佈正式版時,他們在Github上向Release分歧提交一個Pull request的伸請
  2. Gatekeeper在Github的介面上批準這個伸請
  3. Github從Master分歧中把修訂整合到Release的分歧
  4. Github通知Travis有新的修改
  5. Travis把內容上傳至www.tinyboy.net的S3 Bucket
在這流程中應用了一個Github的功能 - Pull Request,平常在軟件開發時會有機會出現不同的分歧,這個機制可以讓Github幫你進行分歧內容整合的動作,並且在網頁上留下記錄。

基於這個特性,也可以用作正式版的發佈之用。首先在這個項目中有二個分歧,一個是master,平常工作的地方,任何修改都會自動上傳到預覽網站。

另一個分歧是release,平常不會修改,當需要發佈正式版時,就會向這個分歧提出一個Pull Request。

Gatekeeper只要查看這個Pull Request的細節便能得知有什麼地方被條改了,Github的介面甚至能顯示圖檔在修改前後的變化:



確認一切妥當,只需要按下這個按扭便能發佈:


參考文件



沒有留言:

Creative Commons License
本網誌Ben Lau製作,以共享創意署名-非商業性-相同方式共享 3.0 香港 授權條款釋出。