最近有私人專案使用 gitlab 作為存放處,為此去研究 gitlab 有什麼工具可以整合 CI 。在這方面 gitlab 有提供自己的 Gitlab CI 功能,可以很方便的設定和整合。
準備專案
在 gitlab 建立帳號後,建立自己的專案起來。這裏我使用的範例程式是一個簡單的 sqlite3 python 函式庫,功能為建立一個 db 存放文章資訊和查詢使用,以及針對這些功能做單元測試。
- 專案連結: my-ci-project
設定 Gitlab CI
建立
.gitlab-ci.yml
檔案。.gitlab-ci.yml
是用來設定 CI 的行為,設定好以後會由 Runner 啟動 job 來執行.gitlab-ci.yml
定義的行為,預設會在 pipeline 裡執行 3 個階段:build
,test
,deploy
,沒有設定的階段在執行時會忽略。.gitlab-ci.yml
需放在專案的 root 資料夾下。設定
.gitlab-ci.yml
這裏我拿官方提供的 bash template 來修改,原始設定如下。更多其他 template 可以從 project 首頁 -> Set up CI -> Apply a GitLab CI Yaml template 下拉選單選擇。
123456789101112131415161718192021222324252627282930313233343536# This file is a template, and might need editing before it works on your project.# see https://docs.gitlab.com/ce/ci/yaml/README.html for all available options# you can delete this line if you're not using Dockerimage: busybox:latestbefore_script:- echo "Before script section"- echo "For example you might run an update here or install a build dependency"- echo "Or perhaps you might print out some debugging details"after_script:- echo "After script section"- echo "For example you might do some cleanup here"build1:stage: buildscript:- echo "Do your build here"test1:stage: testscript:- echo "Do a test here"- echo "For example run a test suite"test2:stage: testscript:- echo "Do another parallel test here"- echo "For example run a lint test"deploy1:stage: deployscript:- echo "Do your deploy here"修改後如下:
12345678910111213141516171819202122232425# 要使用 docker image,不使用 docker 環境可刪除這行。image: ubuntu:16.04before_script:# 在工作開始之前需要準備的東西- apt-get update && apt-get install -y pythonafter_script:# 工作結束之後需要做的事情- echo "After script section"- rm *.dbbuild:# 設定 tag: build, stage 為 build,設定需要在 build 階段做的事情stage: buildscript:- echo "Dry run python"- python lib/sqlite_db.pytest:# 設定 tag: test, stage 為 test,設定需要在 test 階段做的事情stage: testscript:- echo "Do a test here"- python test/test_sqlite_db.pyPush
.gitlab-ci.yml
to GitLab將
.gitlab-ci.yml
commit 到 project 並 push 到 gitlab 上後,就會啟動 Runner 來執行.gitlab-ci.yml
所設定的工作。
設定 Runner
在 Gitlab CI 裡, Runner 可以是 virtual machine,可以是 bare-metal machine,可以是 docker container 或者是 cluster of containers。使用 Runner 時可以使用官方的雲端平台,或者本地端自建私有環境,
使用官方雲端平台
使用官方雲端平台相當簡單,只要在 Project Settings -> CI/CD Pipelines -> Enable Shared Runners ,即可當 Project 有任何更動時,會自動選擇可用的環境來啟動 Runner 執行工作。
自建私有環境
參考 Install GitLab Runner ,選擇要建立的環境安裝步驟。比較需要注意的是 registration token 在 Project Settings -> CI/CD Pipelines 可以找到。