Skip to content

使用 CircleCI 作為《我.影化身》雲端持續整合方案

Published: 6 分鐘

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 開始為專案工作,需要完成下列步驟:

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

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

結語

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

郭信義 (Sam Kuo)

奔騰網路科技技術長,專長分散式系統、Web 應用與雲端服務架構、設計、開發、部署與維運。工作之餘,喜歡關注自由軟體的發展與應用,偶爾寫一下部落格文章。

你可能會有興趣的文章