gitlab-ci-runner 可以裝在 local 也可以跑在 docker container,我自己是安裝在 docker container:
docker run -d --name gitlab-runner --restart always
-v /srv/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:latest
上面步驟完成以後,可以先進入 Gitlab 的 Admin => Runner,這邊會顯示 runner access token:
在該頁面可以找到 token,如果要讓之前設定的 token 失效,可以先點選「Reset」換一個 acces token:
先把 access token 複製下來,接下來建立一個 runner 並連接到 Gitlab 上:
docker exec -it gitlab-runner gitlab-runner register
設定說明:
- gitlab-ci coordinator URL:輸入欲使用 runner 的 Gitlab 網址
- gitlab-ci token:就是你剛剛複製下來的 access token
- gitlab-ci description:輸入 runner 的名稱,例如 runner-php56 或是 runner-php70。這個名稱會在 Gitlab 上面看到,建議填寫清楚的名稱以供辨識。
- executor:我這邊要讓 runner 在 docker container 裡面跑,所以選擇「docker」
- Docker image:在 docker container 執行時,要使用哪個 image 當作 base。我自己懶的自己 built,用的是「edbizarro/gitlab-ci-pipeline-php」
- gitlab-ci tags for this runner:這邊會請你輸入幾個關鍵字,假設在 project 設定中,出現這幾個關鍵字,則 Gitlab 會自動把符合的 executor on 起來跑。我自己會設定「docker」、「phptest」等等
到這邊若沒看到什麼錯誤,在 Gitlab 的 runner 頁面重新整理後,則頁面最下方可以看到剛剛設定好的 gitlab-ci description (runner name):
這頁有看到的話,可以依樣畫胡驢,在需要使用到的專案 runner 設定頁面,使用這個 runner 來跑測試。
在 Gitlab 上將 runner 設定好,接下來只要在專案上加入「.gitlab.ci.yml」,當 git push 後 Gitlab 便會檔案中的設定自動把 executor on 起來跑,設定方法可以參考 Gitlab 提供的 gitlab-ci.yml 說明。
簡易的 PHP library (不包含任何 framework) project 的 .gitlab-ci.yml 大概長這樣:
image: edbizarro/gitlab-ci-pipeline-php:5.6
syntax-check:
script:
- "find . -name '*.php' -print0 | xargs -0 -n1 php -l"
tags:
- docker
unit-test:
script:
- composer install --prefer-dist --no-ansi --no-interaction --no-progress --no-scripts
- ./vendor/bin/phpunit -v --coverage-text --colors=never --stderr
tags:
- docker
上面可以看到我要求 executor 一定要使用「edbizarro/gitlab-ci-pipeline-php:5.6」這個 image,不過由於 tasks 有特別設定 tags,所以這行也不是必要。
而這邊設定了二個 tasks 要求 executor 協助執行:「syntax-check」和「unit-test」。因此 executor 會先跑 syntax-check,確認沒有錯誤後,再去執行 unit-test。
完成後,只要 Gitlab 收到 commit 且就會依照 .gitlab-ci.yml 的設定下去跑。結果會自動顯示在「Pipeline」的列表當中:
Reference: