作者 主題: [CI] Gitlab-ci 自動測試  (閱讀 4336 次)

0 會員 與 1 訪客 正在閱讀本文。

HaWay

  • 大隻佬!
  • 區域板主
  • 俺是博士!
  • *****
  • 文章數: 3971
    • 檢視個人資料
[CI] Gitlab-ci 自動測試
« 於: 2016-02-15 16:10 »
(先貼, 回家再排版整理)

gitlab 原本的作法是 gitlab & gitlab-ci 屬於不同的軟體, 在 x.x 版的更新後
已經將 gitlab-ci 整合進入 gitlab 裡面, 所以最新版的 gitlab 已經納入了 gitlab-ci

CI Server 在幹嘛?

CI 其實叫做持續整合, 當多人同時進行開發的時候, 會需要進行程式碼整合, 在過去的年代各種開發的方式下, 有人把 code 寄來寄去, 有人用 copy 覆蓋, 之後有 SVN , 到現在的 git, 不外乎一個重點, "把所有人的 code 整合成一個版本", 以前用人工的方式合併, 通常會由最資深或是最熟悉的人進行最後整合, 接者釋出一個版號進入測試. "把所有人的 code 整合成一個版本並且進行測試" 這就是 CI Server 再作的事情

CI Server 怎麼做動作?

其實 CI Server 很笨, 也很簡單, 就是把你的 Code 複製一份出來, 執行編譯腳本, 如果要成功, 執行測試腳本, 回報失敗或是成功, 這兩個腳本都是要開發者自己寫出來的, CI 只會看腳本的結束是成功或是失敗, 然後執行相對應的動作, 其實也就這樣而已, 很笨對吧.

有哪些 CI Server ?

最知名的 Jenkins, 然後還有很多.....
小編最近學了 git, 用了 gitlab, 看到 gitlab-ci 就順便玩, 所以這篇文章主要講 gitlab-ci, 稍微提一下 Jenkins, 大致是這樣.

Jenkins V.S. Gitlab-ci

與 Jenkins 相比, 其實 gitlab-ci 有點不同, 所以下面講解一下兩個不同的地方, Jenkins 是老牌子的 CI, 它歷史悠久, 可以支援很多外掛, 用的人也很多, 它本身是用 Java 寫的 如果你是用 Java/.NET 語言的話, 用 Jenkins 不錯, Gitlab-CI 是新的東西, 所以它的外掛並沒有哪麼多, 但也因為它是新的, 所以目前擴展性很高.

還有一個兩者之間最大不同的地方, Jenkins 是一個顯示介面(view) + 執行者(runner) 的軟體, gitlab-ci 是 view 與 runner 分開的, 換個方式講, 要做測試, 需要一個環境, 常常我們在寫程式的時候很容易使用到其他程式庫, 甚至是另外安裝的軟體, DB, 環境變數等等等, 在你的開發環境中這些都好處理, 當你要執行 CI 的時候, 要決定它在哪裡跑測試, 可能是一個新的機器, 或是虛擬環境, 所以如果你是用 Jenkins, 你每次都要在你的測試環境裡面把 Jenkins 裝起來, 然後跑完測試之後去那台機器的網頁介面看結果(或是email出來). 不然就是要使用多重 Jenkins 的架構

如果你是用 Gitlab-CI, 你只要在測試的環境中把 runner 裝起來, 或是先在開發機上面裝一個 runner, 測試機再裝一個 runner ,然後用腳本去控制他就好,測試結果會統一傳回 view, 如果你的測試環境是那種會重新建立, 然後測試完就砍掉的, 用  runner 或許是一個選擇。
不論你的測試環境是什麼平台, 只要能裝 gitlab-runner, 就可以跑測試. 所以把 gitlab 裝在 linux, runner 可以裝在 Windows/Linux/OSX... 等,測試的結果會統一回到 gitlab 內,就不用到處裝 gitlab

Gitlab-CI 原理

在 Gitlab-CI 整合進 Gitlab 後, 只要在專案內放一個 yaml 檔, gitlab 就會依照這個檔的內容幫你跑 script,
如果 script 的內容是 build, 那就編譯腳本, 如果是 testing, 那就是測試腳本, 如果是 build + testing, 那就是編譯 + 測試腳本
所以測試得好不好, 程式碼涵蓋率高不高, 系統是不是穩定, 跟 CI Server 其實沒有關係,
重點應該是在測試的方法跟腳本的撰寫, 有一個 CI Server 並不會讓你變得好棒棒, 你應該要有 QA 工程師.


開始
- 裝 gitlab
gitlab 裝好之後會有內建 gitlab-ci 的 view, 並沒有 runner

- 裝 gitlab-ci-runner
runner 可以跑在 OSX, Windows, Docker, FreeBSD, Linux
照者 https://gitlab.com/gitlab-org/gitlab-ci-multi-runner 的說明把 runner 裝好.

裝好之後可以把它連接到你自己的 gitlab 或是 gitlab.com 上面都可以。

打開你的 gitlab 專案, 取得 token

執行註冊
gitlab-ci-multi-runner register

執行 runner
gitlab-ci-multi-runner run

或跑 install 變成系統服務
gitlab-ci-multi-runner install

跑起來之後你會一直收到下列訊息(不太確定是否是 TLS 的問題, 不過不引響):


- 建立 .gitlab-ci.yaml
你已經建好你的 git/gitlab 專案, 在你的專案底下建一個叫 .gitlab-ci.yml 的檔案,
格式使用 yaml 的格式, 相關內容請參考:
http://doc.gitlab.com/ce/ci/yaml/README.html

ps 注意, yaml 中, 一開頭不能用 tab, 只能用空白, 我剛開始用 tab 縮排, runner 都不會跑, 我查了很久氣死人
ps yaml 的 tag 就是你指定要哪一個 runner 來跑這一個腳本

- 完成
寫好你的專案之後, push 上去 gitlab , 你安裝的 runner 就會幫你跑你的 script 進行 build 或是測試
跑完的結果你再 gitlab 的專案中就可以看到測試結果, 或是點選左側 Builds 查看所有測試
« 上次編輯: 2016-02-16 09:47 由 HaWay »
我做人那麼 nice, 肯定有什麼誤會.....

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7311
    • 檢視個人資料
Re: [CI] Gitlab-ci 自動測試
« 回覆 #1 於: 2016-02-15 23:56 »
請問是 .gitlab-ci.yaml 還是 .gitlab-ci.yml ? 還是兩者皆可?
因為我看GitLab Doc說是後者。

這個檔的產生只能自己寫或拿Sample改是嗎?
有工具可以產生或檢查錯誤嗎?

HaWay

  • 大隻佬!
  • 區域板主
  • 俺是博士!
  • *****
  • 文章數: 3971
    • 檢視個人資料
Re: [CI] Gitlab-ci 自動測試
« 回覆 #2 於: 2016-02-16 09:49 »
請問是 .gitlab-ci.yaml 還是 .gitlab-ci.yml ? 還是兩者皆可?
因為我看GitLab Doc說是後者。

這個檔的產生只能自己寫或拿Sample改是嗎?
有工具可以產生或檢查錯誤嗎?

感謝, 已修正.

yml 好像沒看到產生工具, 只有看到驗證工具
引用
Validate the .gitlab-ci.yml

Each instance of GitLab CI has an embedded debug tool called Lint. You can find the link under /ci/lint of your gitlab instance
我做人那麼 nice, 肯定有什麼誤會.....

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17292
    • 檢視個人資料
    • http://www.study-area.org
Re: [CI] Gitlab-ci 自動測試
« 回覆 #3 於: 2016-02-16 23:17 »
好棒棒!