[Travis CI] matrixの設定
つい先日からtravis ci を触り始めて、ようやく.travis.yml
のmatrixの設定の意味がわかったので忘れないようにメモ
Travis CI
Travis CIは、GitHubと連携してコードのビルドやテストを行える、CIサービスです。
オープンソースのプロジェクトであれば無料で、プライベートプロジェクトであればで有料で利用することができます。
.travis.yml
リポジトリのルートの.travis.yml
にyml形式でテストを実行する環境やテストのコマンドを記述します。
matrix
まずはmatrixキーワードを使わない場合の複数のテスト環境の定義の仕方からpythonを例に紹介します。
language: python
python:
- "3.5"
- "3.6"
- "3.7"
env:
- DJANGO_VERSION=2.2
- DJANGO_VERSION=3.0
install:
- "python setup.py install"
- "pip install -U pip"
- "pip install django~=$DJANGO_VERSION"
script:
- "python manage.py test"
language
で言語を指定します。python
で利用するPythonのバージョンを指定します。env
で環境変数を設定します。同じ名前の環境変数に別の値を指定することで複数の組み合わせを表現できます。install
でテストに必要な環境のセットアップを行います。script
にテストを実行するコマンドを設定します。
上記の例では、python
とenv
の組み合わせで全部で6つのテスト環境でテストが実行されます。
Python | Django |
---|---|
3.5 | 2.2 |
3.6 | 3.0 |
3.7 | 2.2 |
3.5 | 3.0 |
3.6 | 2.2 |
3.7 | 3.0 |
include
さきほどは、可能なすべての組み合わせを実行するようになっていましたが、特定の組み合わせだけで十分な場合は、includeキーワードを使って表現できます。
language: python
install:
- "python setup.py install"
- "pip install -U pip"
- "pip install django~=$DJANGO_VERSION"
script:
- "python manage.py test"
matrix:
include:
- python: "3.5"
env: DJANGO_VERSION=2.2
- python: "3.6"
env: DJANGO_VERSION=2.2
- python: "3.7"
env: DJANGO_VERSION=2.2
- python: "3.6"
env: DJANGO_VERSION=3.0
- python: "3.7"
env: DJANGO_VERSION=3.0
Django3はpython3.5をサポートしていないのでテストの対象から外しました。
exclude
includeはmatrixに含める組み合わせを記述しましたが、特定の組み合わせだけはサポートしないと言った状況の場合は、excludeの方が便利かもしれません。
language: python
python:
- "3.5"
- "3.6"
- "3.7"
env:
- DJANGO_VERSION=2.2
- DJANGO_VERSION=3.0
install:
- "python setup.py install"
- "pip install -U pip"
- "pip install django~=$DJANGO_VERSION"
script:
- "python manage.py test"
matrix:
exclude:
- python: "3.5"
env: DJANGO_VERSION=3.0
先ほどよりだいぶスッキリ書けました。
この時ちょっとだけ注意が必要なのが、exclude
には組み合わせの対象になるすべての条件が合致したものを指定しなければいけない、という点です。
今回の場合、具体的には、組み合わせの対象になるpython
とenv
の両方を指定しなければならないということです。
matrix:
exclude:
- python: "3.5"
とpython
だけ指定しても、すべての組み合わせが実行されてしまいます。
失敗可能な組み合わせをテストする
テストの実行結果が、必ずしも成功してほしいケースでない時もあるかもしれません。
先ほどまでの書き方では、すべての組み合わせのテストに成功しないと、全体として失敗扱いになってしまいますが、nightly
ビルドのバージョンを利用してテストする場合などは、失敗しても失敗扱いにしたくない場合もあります。
そんな時は、テストの失敗を許容する設定を加えることもできます。
language: python
python:
- "3.5"
- "3.6"
- "3.7"
- "nightly"
env:
- DJANGO_VERSION=2.2
- DJANGO_VERSION=3.0
install:
- "python setup.py install"
- "pip install -U pip"
- "pip install django~=$DJANGO_VERSION"
script:
- "python manage.py test"
matrix:
exclude:
- python: "3.5"
env: DJANGO_VERSION=3.0
allow_failures:
- python: "nightly"
allow_failures
にpython: "nightly"
を指定することで、"nightly"
のpythonでは、テストの失敗を許容するようにできます。