使用 Gitlab CI

最近有私人專案使用 gitlab 作為存放處,為此去研究 gitlab 有什麼工具可以整合 CI 。在這方面 gitlab 有提供自己的 Gitlab CI 功能,可以很方便的設定和整合。

準備專案

在 gitlab 建立帳號後,建立自己的專案起來。這裏我使用的範例程式是一個簡單的 sqlite3 python 函式庫,功能為建立一個 db 存放文章資訊和查詢使用,以及針對這些功能做單元測試。

設定 Gitlab CI

  1. 建立 .gitlab-ci.yml 檔案。

    .gitlab-ci.yml 是用來設定 CI 的行為,設定好以後會由 Runner 啟動 job 來執行 .gitlab-ci.yml 定義的行為,預設會在 pipeline 裡執行 3 個階段: build, test, deploy,沒有設定的階段在執行時會忽略。 .gitlab-ci.yml 需放在專案的 root 資料夾下。

  2. 設定 .gitlab-ci.yml

    這裏我拿官方提供的 bash template 來修改,原始設定如下。更多其他 template 可以從 project 首頁 -> Set up CI -> Apply a GitLab CI Yaml template 下拉選單選擇。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    # 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 Docker
    image: busybox:latest
    before_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: build
    script:
    - echo "Do your build here"
    test1:
    stage: test
    script:
    - echo "Do a test here"
    - echo "For example run a test suite"
    test2:
    stage: test
    script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"
    deploy1:
    stage: deploy
    script:
    - echo "Do your deploy here"

    修改後如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    # 要使用 docker image,不使用 docker 環境可刪除這行。
    image: ubuntu:16.04
    before_script:
    # 在工作開始之前需要準備的東西
    - apt-get update && apt-get install -y python
    after_script:
    # 工作結束之後需要做的事情
    - echo "After script section"
    - rm *.db
    build:
    # 設定 tag: build, stage 為 build,設定需要在 build 階段做的事情
    stage: build
    script:
    - echo "Dry run python"
    - python lib/sqlite_db.py
    test:
    # 設定 tag: test, stage 為 test,設定需要在 test 階段做的事情
    stage: test
    script:
    - echo "Do a test here"
    - python test/test_sqlite_db.py
  3. Push .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 時可以使用官方的雲端平台,或者本地端自建私有環境,

  1. 使用官方雲端平台

    使用官方雲端平台相當簡單,只要在 Project Settings -> CI/CD Pipelines -> Enable Shared Runners ,即可當 Project 有任何更動時,會自動選擇可用的環境來啟動 Runner 執行工作。

  2. 自建私有環境

    參考 Install GitLab Runner ,選擇要建立的環境安裝步驟。比較需要注意的是 registration token 在 Project Settings -> CI/CD Pipelines 可以找到。