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

2017-02-08 AWS, Github, Travis CI

最近把 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 的架構概念圖:

  1. 開發者在 Local 進行 TDD 後 Push 到 Github。
  2. Travis 連動 Github 後根據 .travis.yml 進行測試。
  3. 測試結果會出 Report 根據 .travis.yml 決定發 notifications
  4. 測試成功根據 .travis.yml 寫的 Deploy 上傳到 AWS S3 之後 Call CodeDeploy API 更新。
  5. 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 推送更新,所以頁面會自動更新並且將執行結果印在網頁上,最後會提示是否完成。

 

下一篇 Travis CI 到 CodeDeploy

 

*範例可以看 PHP 的 Unit test sample

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱