AppVeyorを使ってEC-CUBEをWindowsサーバーでもCIする

AppVeyorを使ってEC-CUBEをWindowsサーバーでもCIする

Vim プラグインを Windows 環境でテストする – 永遠に未完成をみて、WindowsのCI環境なんてあるんだーと思ったのが間違いだった・・・

EC-CUBEは、Windowsサーバーもシステム要件に入っているのでCI出来るようにしてみました。

と言うわけで CI サービスは AppVeyor を使います
Continuous Integration and Deployment service for Windows developers – Appveyor

Githubのアカウントで Sign In すれば、だいたいわかると思うんですが、問題はBuildとTestがLinux系じゃないのでさっぱりわからんことです。。。

Referenceもあるんだけどお手上げ \(^o^)/
appveyor.yml Reference – Appveyor

で、まぁGoogleさんにあれこれお伺いしていったところ参考になりそうなappveyor.ymlを幾つか発見、これがなかったら確実に無理でした

PHPのインストールの参考
phinx/appveyor.yml at 0.3.x-dev · robmorgan/phinx
php.iniにechoしなきゃいけないとか、特にphp_openssl.dllがないとダメとか。。

MinGWのインストール
net-gd-appveyor/appveyor.yml at master · imazen-discovery/net-gd-appveyor
・・・これしないとbashが使えない

で、完成したappveyor.ymlはこんなんです。

# appveyor file
# http://www.appveyor.com/docs/appveyor-yml

# Set build version format here instead of in the admin panel.
version: "1.0.{build}"

# Fix line endings in Windows. (runs before repo cloning)
init:
  - git config --global core.autocrlf input

environment:
  global:
    USER: "root" 
    DBNAME: "myapp_test"
    DBPASS: " "
    DBUSER: "root"
  matrix:
  - db: mysql
    provider: mysql

services:
  - iis  

# Install scripts. (runs after repo cloning)
install:
  # Set MySQL.
  - cp tests/my.cnf c:\
  - cinst mysql
  - SET PATH=C:\tools\mysql\current\bin\;%PATH%
  # Set bash.
  - cinst mingw-get
  - set PATH=%PATH%;C:\MinGW\msys\1.0\bin;C:\MinGW\bin
  - mingw-get install mingw-developer-toolkit
  ## Set PHP.
  - cinst php
  - SET PATH=C:\php\;%PATH%
  - cd c:\php
  - copy php.ini-production php.ini
  - echo date.timezone="Asia/Tokyo" >> php.ini
  - echo extension_dir=ext >> php.ini
  - echo extension=php_openssl.dll >> php.ini
  - echo extension=php_gd2.dll >> php.ini
  - echo extension=php_mbstring.dll >> php.ini
  - echo extension=php_mysql.dll >> php.ini
  - echo extension=php_curl.dll >> php.ini
  - echo output_buffering = Off >> php.ini
  - echo default_charset = UTF-8 >> php.ini
  - echo mbstring.language = Japanese >> php.ini
  - echo mbstring.encoding_translation = On >> php.ini
  - echo mbstring.http_input = UTF-8 >> php.ini
  - echo mbstring.http_output = pass >> php.ini
  - echo mbstring.internal_encoding = UTF-8 >> php.ini
  - cd C:\projects\ec-cube
  - php -r "readfile('https://getcomposer.org/installer');" | php
  - php composer.phar install

# Don't actually build.
build: off

before_test:
  - bash eccube_install.sh mysql
  - cp tests/require.php.jenkins tests/require.php

test_script:
  - php -i
  - vendor\bin\phpunit.bat --bootstrap data\config\config.php --configuration tests\phpunit.xml.jenkins tests

ポイント①
my.cnfを事前に作って、c:\に置いておくこと
これで、このmy.cnfの設定が生きるので、latin1に悩まされなくなります

ポイント②
mingw-getをインストールすること
これでシェルコマンドが有効になります
結果、environmentに設定した変数もシェルスクリプトから読めるようになりました

ポイント③
php.iniに必要な物はすべて追記すること
.user.iniを置くのも試してみましたが効かなかったです

ポイント④
buildするたびに、MySQL、MinGW、PHP、composer、PHPUnitをインストールするので超ーーーー時間がかかります(;´Д`)
タイミングなのかなんなのか、平気で30分以上かかります……..

その結果・・・・
キャプチャ貼ろうとしたら画像がでか過ぎて貼れなかったのでリンク先参照してください
EC-CUBE – AppVeyor
Windows固有のバグ2件発見\(^o^)/
このバグを探してたわけじゃないけど、まぁやらないよりやってよかった( ´Д`)=3

とまぁ、Azure借りてテストしたほうがはえーんじゃね?という気もしますがPHPのアプリをWindowsサーバーでも強引にCIする方法でした〜

おわり