GitLab 與 CI

  • 1256
  • 0
  • 2016-06-20

練習用 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已經執行完畢了