2017年2月8日 星期三

一條龍佈署 CI 從 Github 跑 Travis 到 AWS CodeDeploy - 介紹及授權 Travis 到 Github

最近把 Puppet 放到 AWS 上面跑 EC2,然後預計要讓 Puppet 在 Github 上面管理,中間透過 Travis Pro 和 AWS CodeDeploy 進行測試 and 更新 Puppet。

 

在這一整個系列 CI 中示範的會是以 Private repository 為主,之後再寫 Public repository 怎麼做。

 

環境準備:

  • 必須要先有至少 1 個 Github Private repository,US $7/month。

  • 建議有 Travis Pro with Bootstrap 版本,US $69/month ( Private 試用只有 100 次 build)。

  • 至少 1 台要佈署的 EC2




 

因為是 for enterprise,所以以上都是要花錢買服務。所以這篇是勸拜文 XD

 

這整個 CI 架構為了幾個目的

  • 使用 Github 來記錄設定檔的修改歷程、回復、及可用性

  • 用 Travis 來做 Unit test

  • 從 CodeDeploy 自動佈署到伺服器 (EC2)

  • 不需要登入伺服器即可完成。


 

整個 CI 的架構概念圖:



  1. 開發者在 Local 進行 TDD 後 Push 到 Github。

  2. Travis 連動 Github 後根據 .travis.yml 進行測試。

  3. 測試結果會出 Report 根據 .travis.yml 決定發 notifications

  4. 測試成功根據 .travis.yml 寫的 Deploy 佈署到 AWS S3。

  5. AWS EC2 從 CodeDeploy agent 去 S3 抓程式碼回來佈署。


從上面這整個流程開發者只要 Push 後就可以 Deploy 到 Production,在 DevOps 的世界可以發現原來開發者也可以這麼容易的發佈線上程式碼,相對的越接觸到 Production 危險程度越高,你在 Unit Test 上面更必須要花費更多的心思來保證你的程式碼是可用性極高的。

 

在這一系列文章不會包含 Unit Test 的部份,單純將 code Deploy 到 Production 的整個流程架構,Unit test 之後準備好再發佈。

 

讓 Travis CI 授權到 Github 上去抓程式碼

再提一次,這邊是使用 Github Private repository,Travis 針對 Public repository 的入口是 https://travis-ci.org,而 Private repository 的入口是 https://travis-ci.com。必須從 Private 的入口使用 Github account 登入。

 

登入 Github account 授權後會在 Travis CI 的頁面上看到 Sync account 的按鈕,必須點下 Sync account 才會將 Github Private repository 自動 sync 到 travis。



Sync 後就會在下面出現 repository 將開關打開至左邊打勾,如果是以 Collaborators 的身分參加 repository 也可以在左邊找到。



 

點選 Status 頁面就會看到剛剛加入的 repository,但是一開始會出現 No builds for this repository,因為還沒有用 travis build 過。



到這邊就算完成 Travis to Github 的串接了。但是要如何進行 Travis Test,關鍵就在於 .travis.yml。

 

在 Github push .travis.yml 來跑 Travis CI 

Travis 會按照 .travis.yml 裡面所寫的內容來執行要如何工作,參考官方 .travis.yml 文件。
$ vim repo/.travis.yml 

language: ruby
notifications:
email:
recipients:
- shazi7804@gmail.com
on_success: always
on_failure: always


  • 使用 ruby

  • notifications 是出 report 的通知,用 email 告知 ( slack 是很常被使用的方式)

  • 宣告 sucess 和 failure 後要什麼後通知 ( always, never, change )


 

由於我宣告了是用 ruby,所以必須要有 Rakefile
$ vim repo/Rakefile 

# noop for Travis CI
task :default

 

這邊暫時不寫 Unit test 的部份,之後再補,直接 push 到 Github,從 Travic 看會不會動。



Travis CI 的頁面是使用 Ajax 推送更新,所以頁面會自動更新並且將執行結果印在網頁上,最後會提示是否完成。

 

下一篇將編寫 .travis.yml 來做 CodeDeploy。

 

*範例可以看 PHP 的 Unit test sample

Orignal From: 一條龍佈署 CI 從 Github 跑 Travis 到 AWS CodeDeploy - 介紹及授權 Travis 到 Github

沒有留言:

張貼留言