OSS なら 4 コンテナ無料で使えるようでしたので、iutest でも使ってみました。
したいこと
iutest では既に以下の CI サービスをそれぞれ目的別に使用しています。| CI | 目的 |
|---|---|
| Travis CI | gcc/clang でのテスト |
| Shippable | Wandbox で gcc/clang の各バージョンごとの syntax チェック |
| Wercker | Wandbox で gcc/clang の各バージョンごとの syntax チェック |
| Drone.io | コンパイル時間の指標 |
| Appveyor | Visual Studio でのテスト、Nuget デプロイ |
今回は iutest 付属の python ツールのテスト用として Circle CI を使います。
テスト内容としては、様々なバージョンの python で実行して問題がないかをテストします。
circle.yml
Circle CI も Travis CI などと同じように YAML で設定をします。今回の利用目的は、様々なバージョンでのテストということで、各バージョンごとにマトリックスを組もうと思ったのですが……そういったことは Circle CI ではできないようです。
rvm - Circle CIで複数Rubyバージョンを平行してテストする - Qiita
ただ、こちらに書かれているようにコンテナをパラレルで起動することで並列にテストすることができます。
それか、単純にバージョンを変更しながら直列に実行するかですね。
幸い github の public プロジェクトならば、4つまで無料でコンテナを使えるので、今回はパラレルで実行してみました。
prallel
まず、使用するコンテナの設定をします。「Project Settings」 を開き、「Tweaks」 にある 「Adjust Parallelism」を開きます。
下のようにコンテナ設定画面になるので、4x まで選択します。
コンテナの設定は完了です。
次に、circle.yml の test の各処理に対して並列実行であることを追記します。
test:
- python --version:
parallel: true
これでこのコマンドは各コンテナごとに実行されます。
pyenv
Python のバージョンを変えるのは pyenv で行います。どのコンテナかどうかは、CIRCLE_NODE_INDEX でわかるのでこれで分岐します。
dependencies:
pre:
- |
case $CIRCLE_NODE_INDEX in
0) pyenv install -ks 2.7.10; pyenv global 2.7.10; $(pyenv which pip) install requests twilio; ;;
1) pyenv install -ks 3.5.0; pyenv global 3.5.0; $(pyenv which pip) install requests twilio; ;;
2) pyenv install -ks 3.4.3; pyenv global 3.4.3; $(pyenv which pip) install requests twilio; ;;
3) pyenv install -ks 3.3.3; pyenv global 3.3.3; $(pyenv which pip) install requests twilio; ;;
esac
コマンドの先頭の | は複数行に書くためのものです。
さて、ここでちょっと躓きました。
最初のころは以下のように machine で python version 指定していました。
machine:
python:
version: 3.5.0
そうすると、dependencies で pyenv global しても、test に入ったときには machine で指定したバージョンに戻ってしまっていました。
(理由はよくわからないけど、そういうもんだと思って) machine の記述は削除しました。
あとは、test で普通に python を使えば任意のバージョンで実行されます。
https://circleci.com/gh/srz-zumix/iutest
※ コマンドの末尾にコンテナ番号が {} つきで表示されます
まとめ
途中少し(いや割りと…)躓きましたが、複数バージョンでのテストができるようになりました!Travis CI ほどではありませんが、分かってしまえば簡単でした。
あ、最後に CI サービス定番のバッジですが、
プロジェクト設定の Notifications > Status Badges で取得できます。
いやー Circle CI も便利ですなー
0 件のコメント:
コメントを投稿