CircleCI 是山姆鍋到目前為止認為最好用的雲端持續整合方案。《我. 影化身》開發自然也需要利用持續整合來自動執行軟體測試與建置工作。本文便以《我. 影化身》作為應用實例,說明如何簡單完成與 CircleCI 的設定。

山姆鍋假設您已經有 GitHub 以及 CircleCI 關聯的帳戶,且有可以使用的開源專案。 如果沒有,您也可以直接 Fork 《我. 影化身》開源專案:https://github.com/eavatar/eavatar-me

設定目標

山姆鍋希望每次有程式碼簽入 (check-in) 時,便會啟動整個建置流程完成下列工作:

  • 執行單元測試
  • 執行功能測試
  • 製作應用發行包(distribution package)

未來目標之一是能夠建置 Docker 映像(image),但本文並沒有相關說明。想了解如何使用 CircleCI 建置 Docker 映像, 可以參考 Amo Wu 的 DevOps:持續整合&持續交付(Docker、CircleCI、AWS)

建置環境需求

自動跟手動建置軟體對於環境的需求基本上是類似的,對於《我. 影化身》建置環境的基本需求,請參考專案文件: http://docs.eavatar.me/en/latest/development.html

準備描述檔 circle.yml

要讓專案可以在 CircleCI 建置,基本上只需要一個描述檔, circle.yml。透過這個描述檔, CircleCI 便可以了解專案所需要的執行環境,以及根據描述安裝相依套件、執行測試、建置與部署工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
general:
artifacts:
- "dist/avame-0.1.0+${CIRCLE_BUILD_NUM}.tgz"

dependencies:
override:
- sudo mkdir -p /usr/local/lib
- sudo pip install -U pip
- sudo easy_install -U setuptools
- pip install -r requirements.txt
- pip install selenium

test:
override:
- sudo cp plat.libs/libsodium.so.13.1.0 /usr/local/lib/
- sudo ln -s /usr/local/lib/libsodium.so.13.1.0 /usr/local/lib/libsodium.so.13
- sudo ln -s /usr/local/lib/libsodium.so.13.1.0 /usr/local/lib/libsodium.so
- PYTHONPATH=".:./src" py.test -vvv tests/unit/
- PYTHONPATH=".:./src" py.test -vvv tests/functional/test_home_page.py
- PYTHONPATH=".:./src" pyinstaller pack/avame.spec --clean -y
post:
- cd dist && tar zcvf avame-0.1.0+${CIRCLE_BUILD_NUM}.tgz avame/

其中,

  • general:
    描述建置完成後要保留的產出物(artifacts),這裏山姆鍋指定建置出來的應用發行包。
  • dependencies:
    安裝編譯、測試過程會用的系統與應用套件。這裏也升級 pip 以及 setuptools 套件, 這是從之前的專案移植過來,已經不確定需不需要了。 安裝 selenium 是為了網頁介面的功能測試,CircleCI 已經有安裝測試時需要的 Firefox 瀏覽器。
  • test/override:
    把 Ubuntu 環境需要使用的 libsodium 動態連結檔複製到正確的位置。 《我. 影化身》使用它來支援非對稱式 加解密功能。如果沒有這個步驟,相關測試會出現找不到程式庫的問題。 本文範例只使用一個簡單的功能測試案例,這部分內容會根據專案進展而更動。
  • test/post:
    如果單元以及功能測試都完成,打包發行套件所需的檔案。這裏檔名中 ${CIRCLE_BUILD_NUM}部分, 會根據環境變數 CIRCLE_BUILD_NUM 來決定,代表目前建置工作的順序編號。 CircleCI 在建置時會提供一些環境變數,可以參考這篇文件: https://circleci.com/docs/environment-variables

開始持續集成工作

要讓 CircleCI 開始為專案工作,需要完成下列步驟:

  1. 登入 CircleCI, 從選單 (應該在左邊) 選擇 “Add Projects”
  2. 選擇要使用的 GitHub 用戶或組織帳戶
  3. 選擇要建置的專案,點擊 “Build project”

以上步驟是根據撰寫本文時的使用介面流程,如果跟您看到的不同,請自行斟酌調整。由於已經授權過 CircleCI 自動設定 GitHub 上的開源專案,CircleCI 會幫我們把相關的設定完成。之後只要有程式碼 check-in, 便會自動執行建置工作。其它有更多的設定可以運用,請自行參考 CircleCI 文件

結語

雖然文章沒有提到,但 CircleCI 對於 Docker 映像 (image) 建置的支援也很完整。 不過這是根據山姆鍋之前的經驗,現在其它雲端持續整合方案應該也有 Docker 支援才對。 因為《我. 影化身》有圖形用戶介面,需要針對不同桌面環境做建置工作, 採用 CircleCI 主要是做持續整合測試與 Docker 映像的建置與發佈工作。