WindowsでJenkins経由のPythonのユニットテストをやってみる

ローカルのWindows上でもJenkinsが動かせたら、いろいろと実験しやすいなと思ってgithubからリポジトリをcloneしてPythonユニットテストが通るまでやってみる。

0. JDKのインストール

OracleからJDK1.7系をダウンロードしてインストール。

インストールするディレクトリはスペースを含まないディレクトリにしておいたほうが無難 (例:C:\Java\jdk1.7.0)。

1. Jenkinsのインストール

http://jenkins-ci.org/からWindows版をダウンロードして解凍。

中のmsiファイルを実行してインストール。 JDKと同じくスペースが入らないディレクトリにしておいたほうが無難そう(例:C:\Jenkins)。

デフォルトでは http://localhost:8080/ にアクセスするとJenkinsのダッシュボードにアクセスできる。

2. Pythonユニットテスト環境を作る

以下の記事を参照してpipのインストールまで行う。

ソースコードは以下の記事のものを使うのでmockをインストールしておく。

> pip install mock

以下のパッケージのインストールを行う。

> pip install nose
> pip install unittest-xml-reporting
> pip install coverage

3. Jenkinsの設定

3.1. gitとCoberturaプラグインの導入

  1. 「Jenkinsの管理」
  2. プラグインの管理」
  3. Git Plugin, Cobertura Pluginを選択してインストール

3.2. Jenkins用のSSH公開鍵を作成

JenkinsはデフォルトではLocal Systemユーザーで実行されるようなので、そのユーザー用に鍵を作る。

> cd C:/Windows/SysWOW64/config/systemprofile/.ssh
> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/【ユーザー名】/.ssh/id_rsa): ./【秘密鍵ファイル名】

できた【秘密鍵ファイル名】.pubの中身をgithubSSH Keysに登録しておく。

3.3. ジョブの作成

3.3.1. githubからソースコードを落とすところまで
  1. 「新しいジョブの作成」
  2. プロジェクト名を入力して、フリースタイル・プロジェクトのビルドを選択
  3. ソースコード管理 → Git → Repositories → Repository URLに自分のGithubリポジトリを入力。 git@github.com:mia-0032/python-test.git

  4. Credentialsの横のAddからKind「SSHユーザー名と秘密鍵秘密鍵「Jenkinsマスター上の~/.sshから」を選択。

ここまでで「ビルドを実行」するとワークスペース以下にファイルが落ちてきているはず。

3.3.2. テストの実行結果とカバレッジの出力まで

ビルド → ビルド手順の追加 → Windowsバッチコマンドの実行に以下の記述を追加。

(Jenkinsの実行ユーザーで【Pythonのインストールディレクトリ】\ScriptsにPathを通してあること。)

nosetests test/ -v --with-coverage --with-xunit
coverage xml

ビルド後の処理 → ビルド後の処理の追加 → JUnitテスト結果の集計 → テスト結果XMLnosetests.xml と入力。

同じく ビルド後の処理の追加 → Cobertura カバレッジ・レポートの集計 → Cobertura XMLレポート パターン → coverage.xml と入力。

ビルドの実行

上記の手順で「ビルドを実行」すれば、テストが成功して以下の用にグラフが表示されます。

f:id:mia_0032:20140413124017p:plain

という感じで完了。 いろいろと試行錯誤していたら時間かかった・・・。

関連エントリ


改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)