TypeScriptのプロジェクトで、テストをMocha + Chai + Sinon + Testemで書いています。
せっかくなのでCIに載せたいと思い、CircleCIを試してみました。
Testemでブラウザテストを実行できますが、CircleCIではtest_ciコマンドでXvfbでChromeとFirefoxのテストができます(PhantomJSも)。
CircleCIのデフォルトビルド設定ではテストが実行できないので、以下に各種設定とCicle.ymlによるカスタムビルド設定を共有します。
ソースコード
今回の設定を反映したソースコードはこちら
- npmパッケージはローカルインストールで
- 各種コマンドはpackage.json内に設定し
npm run ${command}で実行 - pre-mergeテストっぽく、masterにmergeしても大丈夫かをチェックするため、
git merge --no-commit origin/masterをしてからtest_ciを走らせる
と言った感じで書いております。
参照元
基本事項
- x86_64 Ubuntu 12.04上で実行されます
設定可能項目
リポジトリホーム直下にcircle.ymlをセットすることで、ビルド内容をカスタマイズすることができます。
- machine
- パッケージインストールや環境変数設定
- checkout
- 対象リポジトリのカスタマイズ
- dependencies
- プロジェクトspecificな環境構築
- bundle installとか
- database
- DB migration等
- test
- テスト時の設定
- deployment
- デプロイのカスタマイズ
各コマンドは異なるshellで実行されるため、環境変数は共有されません。
ゆえに、globalな環境変数を設定するときは、machine configurationの中でenvironmentで指定する必要があります。
カスタムコマンドの実行タイミング指定
- pre : CircleCI defaultの前に実行
- override : CircleCI defaultの上書き
- post : CircleCI defaultの後に実行
設定してみた
machine
今回はTypeScriptコードに対するテストなので、machineの設定を以下にしました。
machine:
node:
version: 0.11.13
Javaの場合はこんな感じ
machine:
java:
version: openjdk8
checkout
リポジトリはそのままデフォルトです。
新しいブランチをGithubにpushすると、自動的にそのブランチに対してテスト実行してくれます。
dependencies
以下のコマンドを実行。TypeScriptのコンパイルとかしてます。CircleCIのデフォルトではnpm installだけ実行してくれますが、TypeScriptコンパイルが必要だったのでoverrideで追加。postでも良かったかも。
dependencies:
override:
- npm install
- npm run tsd_install
- npm run bower_install
- npm run build_staging
database
今回はなし。migration等行う場合はここで。
test
jsのテストを以下のように実行。
test:
override:
- npm run test_ci
deploy
また今度。
その他
- Githubでプルリク送ると、featureブランチの最新テスト結果を見てGithub側でgood to merge等のバッジを出してくれる。
- プルリクした時にマージ先のブランチへのpre-mergeテストをプルリクフックで実行してくれると嬉しいのだが(CircleCIの中の人によると、まだサポートはないとのこと)。