Python
GitHub
TravisCI

GitHub+TravisCIでpush時にテスト実行

GitHubのPythonプロジェクトのリポジトリに修正をpushしたときにTravisCIでテストを実行させる方法。

大体は、Travis CIのGetting Started通りにすれば良いが、すぐに分からなかった部分もあるのでメモ。

https://docs.travis-ci.com/user/getting-started/


1. プロジェクト構成


  • コード本体:script.py

  • テスト本体:test.py


    • script.pyのテストコード。Python標準のテストフレームワークを使用。コマンドで"pytest test.py"とするとがテスト実行



  • TravisCI用の設定ファイル:.travis.yml

具体的にはこちら。

https://github.com/KamikazeZirou/TravisCILearning

あくまでサンプル。当然、コードやテストコードの場所は変えられる。


2. .travis.ymlの記述

language: python

python:
- "3.6"
script:
- pytest test.py


  • lauguage:ソフトウェアプロジェクトで使用しているプログラミング言語

  • python:Pythonのバージョンの指定。省略できるが、その場合バージョンは2.7になる

  • script:push時に実行するコマンドを指定。test.pyを実行したいので、"pytest test.py"。

記述の詳細は、以下のページを参照。

https://docs.travis-ci.com/user/languages/


3. TravisCIの設定


基本

以下のGetting Started通りにすれば大体良い。

https://docs.travis-ci.com/user/getting-started/

TravisCIのアカウントのActivateとCI対象のリポジトリの選択をしておかないと、

pushしてもTraisCIによるテストは実行されないので注意。

(上の手順のページに書いてあるのだが、最初は見落としてしまった・・・)


4. GitHubの設定(任意)

デフォルトだと、pull requestの修正がテストを通っていなくても、masterにマージできてしまう。

それだと、このような仕組みを導入する意味が薄れるので、テストに通過していないpull requestはmasterにマージさせないように設定した方が良いと思う。以下、設定手順。


  1. GitHub上の自分のプロジェクトを開く

  2. Settingsを開く

  3. OptionsのBranchesを選択

  4. Branch protection rulesをEdit

  5. "Apply rule to"に"master"と記述

  6. "Require status checks to pass before merging"にチェックを入れる

  7. Travis CIのどのチェックの通過をmustにするかを指定が近くにあるので、全部チェックを入れる("Status checks found in the last week for this repository"という項目)

  8. Save changes


5. push時のテストの実行結果

ブランチ作成 -> pull request -> ブランチにpushした時のGitHubから見える実行結果。

travis_ci_check_result.png


ポイント

各チェックのDetails -> 一番下の"View more details on Travis CI"より、Travis CI上の詳細な実行結果が見れる。

"Travis CI - Branch"と"Travis CI - Pull Request"のチェック内容は同じ。前者はブランチへのpushをトリガーとしたチェック、後者はpull requestの修正が変化したことをトリガーとするチェック。片方だけを実行するようにTravis CIを設定することも可能。ただ、細かい設定が面倒なのと簡単なプロジェクトなら害もなさそうなのでこのままにした。止めるなら後者のチェックだと思う。

テストに失敗すると、管理者権限がないメンバーからはSquash and mergeボタンを押せなくなる(上述のGitHubの設定による)。

管理者権限があると押せてしまうが、上述のGitHubのBranch protection rulesの"Include administrators"にチェックを入れると、管理者からもブランチを保護できる模様。