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 便可以了解專案所需要的執行環境,以及根據描述安裝相依套件、執行測試、建置與部署工作。
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 開始為專案工作,需要完成下列步驟:
- 登入 CircleCI, 從選單(應該在左邊)選擇 “Add Projects”
- 選擇要使用的 GitHub 用戶或組織帳戶
- 選擇要建置的專案,點擊 “Build project”
以上步驟是根據撰寫本文時的使用介面流程,如果跟您看到的不同,請自行斟酌調整。由於已經授權過 CircleCI 自動設定 GitHub 上的開源專案,CircleCI 會幫我們把相關的設定完成。之後只要有程式碼 check-in, 便會自動執行建置工作。其它有更多的設定可以運用,請自行參考 CircleCI 文件 ⎘ 。
結語
雖然文章沒有提到,但 CircleCI 對於 Docker 映像(image)建置的支援也很完整。 不過這是根據山姆鍋之前的經驗,現在其它雲端持續整合方案應該也有 Docker 支援才對。 因為《我.影化身》有圖形用戶介面,需要針對不同桌面環境做建置工作, 採用 CircleCI 主要是做持續整合測試與 Docker 映像的建置與發佈工作。