iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
2
Modern Web

成為 Modern PHPer系列 第 24

Day 24:使用 Travis CI

  • 分享至 

  • xImage
  •  

前言

CI,Continuous Integration,中文譯為「持續整合」,其目的在於將一些枯燥無聊的工作自動化。

Travis CI 是一個免費提供給 GitHub Public Repo 的 CI 服務,它最大的優點與缺點都是支援 GitHub 這一點。

許多的 Open Source 專案都採用 Travis CI 作為其 repo 的 CI 工具,下面舉幾個常見的應用場景

  • 執行 Unit Test
  • 以工具(如 ESLint 或 PHPCSFixer)修正 Coding Style 並發 Pull Request
  • 以工具(如 godoc 或 rustdoc)自動產出文件並且發佈到文件用的靜態網頁
  • 將專案打包為符合 OCI 標準的 Image,並且 Push 到 Container Registery
  • 佈署專案

設定

基礎模板

Travis 提供 PHP 一系列的整合設定,你甚至不需要自行安裝 composer。

應該在專案的根目錄中建立 .travis.yml,內容如下所示

language: php

php:
    - 7.2
    - 7.3

install:
    - composer install --prefer-dist --quiet

script: vendor/bin/phpunit

上述的設定檔中,我們做了一些事

  • 將在 7.27.3 的 PHP 環境中分別執行一次測試
  • install 先執行 composer install 安裝必須的 Dependencies
  • script 處指定測試時使用的指令

使用資料庫

雖然理論上 Unit Test 中不應包含資料庫存取,但是在某些框架整合時考量完整性,還是會將資料庫包含其中。

如果要在 Travis 上設定資料庫的話,可以利用 services 來指定,並且依靠 before_install 建立所需環境。

language: php

php:
    - 7.2
    - 7.3

services:
    - mysql

before_install:
    - mysql -e 'CREATE DATABASE IF NOT EXISTS test;'

install:
    - composer install --prefer-dist --quiet

script: vendor/bin/phpunit

值得注意的是,MySQL 的版本會因為使用的作業系統不同而有所差異

Ubuntu Precise Ubuntu Trusty Ubuntu Xenial Ubuntu Bionic
MySQL 5.5 5.6 5.7 5.7

作業系統的版本可以利用 .travis.yml 中的 dist: bionic 來指定

安裝 extension

  • 對於已經安裝但未啟用的 extension,可以利用 phpenv config-add 來載入自定義的 ini 以啟用 extension
  • 對於需要從 PECL 上安裝的 extension,可以在 before_script 中進行安裝
language: php

php:
    - 7.2
    - 7.3

before_script:
    - pecl install xdebug
    - phpenv config-add xdebug.ini

install:
    - composer isntall --prefer-dist --quiet

script: vendor/bin/phpunit

後記

Travis CI 比起 GitLab CI、Circle CI 經常會受到許多批評,包括它對於 Container 的支援腳步過慢,或是對於其它 Git Repo Service 的支援性等等。

然而憑藉著只要開源就免費的優勢,目前仍是 GitHub Repo 中最熱門的 CI 選擇,而且也提供許多方便的預設環境(例如不需要自行安裝 composer 的 PHP 環境,或是開箱即用的資料庫服務)為開發者省下不少維護上的麻煩(不過使用預定義環境的缺點就是無法自定義環境)。


上一篇
Day 23:Class 的 Magic Method
下一篇
Day 25:Swoole 帶來的變革
系列文
成為 Modern PHPer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言