我是山姆鍋

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 映像的建置與發佈工作。