GitHubにpush済みのpythonコードをCIしてみる。

スポンサーリンク
Post image

DIY太陽光発電システムの発電状況をグラフ化してチェックできるようにしていますが、背後では、Pythonというプログラミング言語で記述したソフトウェアが動いています。

PyPIに公開しているので、ぜひ使ってやってください。こんな感じ↓で見つかります。

$ pip search tsmppt60-driver
tsmppt60-driver           - Python module to get status of your solar charge controller TS-MPPT-60.  

…事前にTS-MPPT-60を入手する必要はありますが…。

PyPIで公開するに当たって、さすがにテストは真面目に書かないとまずかろうと思い、unittestやdoctest、nose、MiniMockを使ってみました。

個別の詳細はまた今度に回して、今回はCI(Continuous Integration)、継続的インテグレーションネタです。

有名なCIツールにJenkinsがありますが、今回作ったtsmppt60-driverはgithubにOSSとしてpushしてあるので、流行りのTravisCIを使わせて頂きました。

TravisCIを使うに当たって、全体の流れは以下のような感じでになります。

  1. TravisCIアカウント登録(GitHubアカウントとの連携可能)
  2. TravisCIのWeb設定画面上で、CI対象のGitHubリポジトリを選択
  3. TravisCIのヘルプに従って設定した.travis.ymlファイルをGitHubリポジトリに追加

githubアカウントを持っていれば、ブラウザ上で簡単なGUI操作のみで、githubへのpushをhookして自動ビルド&テストしてくれる上、Build StatusのようなバッジをREADMEに表示することもできます。

その設定は、以下のようにとても簡単です。

まずはTravisCIに飛び、Sign In With GitHubでログインします。

すると、すでにGitHubとの連携が完了しているので、CIしたいリポジトリのスイッチをONにします。

以下の例ではhome-automationリポジトリのCIをONしています。

上の画像のギアマークをクリックすると、詳細な設定やビルド履歴を参照することができます。

多分、デフォルトでpushをトリガーにビルドする設定になっていると思います。

あとはTravisCIのヘルプに従って設定した.travis.ymlファイルをGitHubリポジトリに追加、pushするだけです。

tsmppt60-driverはpythonパッケージなので、以下のようにpython向けの設定になります。

language: python  
python:  
  - "2.7"
  - "3.2"
  - "3.3"
  - "3.4"
  - "3.5"
  # does not have headers provided, please ask https://launchpad.net/~pypy/+archive/ppa
  # maintainers to fix their pypy-dev package.
  - "pypy"
# command to install dependencies
install:  
  - pip install .
  - pip install -r requirements.txt -r test-requirements.txt
# command to run tests
script: nosetests  

Pythonの主要バージョン、最新バージョンは一通り押さえておき、ビルド、テスト前に必要なパッケージをpip installするようにしています。

requirements.txtはtsmppt60-driverが動作するのに必要な依存パッケージが、test-requirements.txtにはテスト実行するのに必要な依存パッケージが記載されています。

$ cat requirements.txt
requests>=2.8.0  
$ cat test-requirements.txt
MiniMock>=1.2.8  
nose  
coverage  

これらの.travis.yml, requirements.txt, test-requirements.txtをtsmppt60-driverリポジトリのルートに置いてgit add/commit/pushすると、以下のように結果が表示されます。

ビルドやテストに成功し続けている間は何も通知してくれませんが、一旦失敗するとJenkinsのようにFailした旨をメールで通知してくれます。

GitHubのREADMEにビルドステータスのバッジを表示する方法もTravisCIのヘルプに載っています。

privateリポジトリのビルドステータス表示には、バッジへのURLにセキュリティトークンが含まれるので注意、とありますが、今回のリポジトリはpublic扱いなので問題ありません。

これでテスト環境は整ったので、次はテストコードのカバレッジ計測に続きます。

comments powered by Disqus