練習用 GitLab 與 GitLab Runner 來達到版本控管私有化以及自動化測試
實作環境與相關套件
- 作業系統: Ubuntu Server 14.04 LTS 64 bit
- Docker: 1.11.2
- Docker Image: gitlab/gitlab-ce、gitlab/gitlab-runner、phensley/docker-dns、node
開始實作
- 首先先把 docker dns 架起來
-
$ docker run -d --name dns -v /var/run/docker.sock:/docker.sock phensley/docker-dns
- 再來是 GitLab,因為我的環境是在 hyper-v 上面,那有需要讓外面的程式可以連進去,所以就需要在啟動的時候設定 port binding
-
$ docker run -itd --dns $(docker inspect -f '{{.NetworkSettings.IPAddress}}' dns) --name gitlab --dns-search docker -p 80:80 -p 443:443 gitlab/gitlab-ce
- 最後是 GitLab Runner
-
$ docker run -d --name gitlab-runner --dns $(docker inspect -f '{{.NetworkSettings.IPAddress}}' dns) --dns-search docker --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner
- 來看看目前開了哪些容器
- 再來讓 GitLab 知道 GitLab Runner 的存在
-
$ docker exec -it gitlab-runner gitlab-runner register
這邊我設定 Runner 是另外開啟 Container 來執行測試程式
- 看到這個就已經是綁定成功囉!!再來就是寫個測試程式是看看是不是能正常 work
- 我這邊先用 mocha 示範的測試程式來做 demo
- 這是給 GitLab 讀取的 CI 設定檔
.gitlab-ci.yml
其他設定 - 一旦把 .gitlab-ci.yml 加進專案裡面並且 push 到 GitLab 上面,GitLab 就會開始跑 Runner 來執行專案的測試程式,這是我前一次跑的結果
因為是 Runner 另外開一個 Container 來執行測試程式,但是新開啟的 Container 找不到
b7fe20fe549b
這個主機,因此無法將專案從 GitLab 上抓下來 - 因此需要去設定 Runner 裡面的 config.toml 讓新開啟的 Container 能知道
b7fe20fe549b
在哪 -
$ sudo vim /srv/gitlab-runner/config/config.toml #因為在前面啟動 Runner 的時候就有指定 volume 對應的位置
然後在 [runners.docker] 內加上
links = ["b7fe20fe549b:gitlab"]
其他設定 如此一來由Runner開起來的Container就可以抓專案下來了 -
然後再跑一次試看看看到 passed 就表示成功了!!因為整個畫面太長了所以就只有擷取一部分來展現結果
-
然後來看看現在有幾個 Container 正在執行這邊就會看到用來測試的Container已經執行完畢了