2018/05/20

建置 Gitlab Ci/CD :: CI

寫在前面

Gitlab的CI非常簡單,只要在專案建立 .gitlab-ci.yml 設定檔
每次 commit 就會照著設定跑一次。

不過事情還是沒有這麼簡單,
因為Gitlab還需要一個角色來執行這件事情 - gitlab-runner

所以麻煩的點會是在 runner 執行的部分,
runner 又有不同的執行方式 (executor),
官方說明文件有一大塊是在說明 runner 的設定,就知道他有多複雜了。

我是使用 docker 來執行,這樣每次的測試環境都是乾淨的。


runner 是跟 gitlab 獨立的,意謂可以另外開一台機器專門給 runner 執行;或是利用第三方 (AWS, Google) 的服務 (ex: k8s) 來跑。

測試環境 或是 小架構 其實可以把 gitlab 與 runner 裝在同一台機器上;測試頂多跑個10分鐘就很久了,如果同時測試的案子變多效能受到衝擊再切出來也不遲。

安裝 docker

由於我使用的 runner executor 是 docker,這台機器需要安裝 docker 才可以使用。

安裝文件我推薦 DigitalOcean 的 How To Install and Use Docker on Ubuntu 16.04 比較易懂。

安裝 runner 

官方文件,請持續 SSH COPY/PASTE;裝到第二步就好

註冊 runner

runner 裝好之後需要跟 Gitlab 註冊,gitlab才知道去哪找 runner 執行工作。
中間需要兩項資料,請登入 Gitlab 網站並進入管理者介面。

取得 token


紅框處就是等下註冊 runner 的資料

修改 hosts

由於是使用虛擬的網域名稱,Gitlab也需要修改hosts,不然會找不到 gitlab.local 這個名稱。
(不然其實也可以打 http://127.0.0.1)

執行註冊

回到 SSH,執行 sudo gitlab-runner register


註冊 gitlab-runner (executor: docker)
官方文件


回到 Gitlab 網頁管理者,就看到下方顯示註冊的 runner


建立 .gitlab-ci.yml


先建立一個簡單的設定,目的是測試整個環境是不是正確的。
https://github.com/Aspertw/laravel_cicd_deployer/blob/'init'/.gitlab-ci.yml

commit > push to Gitlab
在專案內的 CI/CD > Jobs 就會看到有一列在 running

太晚抓圖,抓到失敗的狀態了

點左邊的框框處可以看到詳細正在跑的訊息。


<題外話> 為什麼工作會失敗

同樣還是因為虛擬的網域名稱,gitlab-runner找不到gitlab repo,無法clone下來做測試。

因為使用docker會使整個環境是獨立的狀態,gitlab-runner是吃不到host的設定。

需要在gitlab-runner加上額外的設定讓他知道要去哪裡找 gitlab.local 這台機器。

修改設定檔
路徑在 /etc/gitlab-runner/config.toml,需要用 root 權限修改 (su, sudo)

增加 extra_hosts
extra_hosts 要注意的是 IP 必須是機器實際拿到的IP (100.250是AP發給Gitlab的IP),不能用 localhost 或 127.0.0.1

官方文件


Job Success

修改後可以再送個 commit 或是 點 Jobs 旁邊的 Retry 按鈕重跑 (.gitlab-ci.yml沒更改時都可以直接按 Retry 重跑)


這樣 CI 環境就 OK 啦~

沒有留言:

張貼留言