最近把 Puppet 放到 AWS 上面跑 EC2,然後預計要讓 Puppet 在 Github 上面管理,中間透過 Travis Pro 和 AWS CodeDeploy 進行測試 and 更新 Puppet。
在這一整個系列 CI/CD 中示範的會是以 Private repository 為主,之後再寫 Public repository 怎麼做。
環境準備:
- 必須要先有至少 1 個 Github Private repository,US $7/month(個人),組織的話是 US $9/month。
- 建議有 Travis Pro with Bootstrap 版本,US $69/month ( Private 試用只有 100 次 build)。
- 至少 1 台要佈署的 EC2
因為是 for enterprise,所以以上都是要花錢買服務。所以這篇是勸拜文 XD
這整個 CI/CD 架構為了幾個目的
- 使用 Github 來記錄設定檔的修改歷程、回復、及可用性。
- 用 Travis 來做 Unit test。
- 從 CodeDeploy 自動佈署到伺服器 (EC2)
- 不需要登入伺服器即可完成。
整個 CI/CD 的架構概念圖:
- 開發者在 Local 進行 TDD 後 Push 到 Github。
- Travis 連動 Github 後根據 .travis.yml 進行測試。
- 測試結果會出 Report 根據 .travis.yml 決定發 notifications。
- 測試成功根據 .travis.yml 寫的 Deploy 上傳到 AWS S3 之後 Call CodeDeploy API 更新。
- AWS EC2 從 CodeDeploy agent 找 CodeDeploy Server 找到更新的資料後 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 推送更新,所以頁面會自動更新並且將執行結果印在網頁上,最後會提示是否完成。
*範例可以看 PHP 的 Unit test sample