2015年3月22日日曜日

JenkinsでtoxとPytestを使ってCI

JenkinsでToxとPytestを使って、テストを実行するまでの設定。

まず、Jenknsがインストールされているサーバに下記をインストールします。
本当は、Virtualenvを使うのが良いのですが、Jenkinsの設定が面倒なので、そのまま入れます。。。。(あんまり良くないよね。。。。。)

1. Tox.iniを準備
試験したいプロジェクトにTox.iniファイルを作成します。
今回は、Python2.7と3.4で、PytestとPEP8確認とカバレッジを実行します。(ちなみに、試験で使うPythonはインストールされてないとダメです。なので、Python2,7と3.4はJenkinsサーバにインストール済みです。)

プロジェクトのdirectory構成はこんな感じ。
├── LICENSE
├── application
│   ├── Calculation.py
│   ├── __init__.py
├── setup.py
├── test
│   ├── test_Calculation.py
└── tox.ini


Tox.ini
[tox]
envlist = py27, py34

[pytest]
pep8maxlinelength = 120

[testenv:py27]
basepython = /usr/local/python27/bin/python2.7

[testenv:py34]
basepython = /usr/local/python34/bin/python3.4

[testenv]
deps =
  pytest
  pytest-cov
  pytest-pep8
  blinker
  Flask
  itsdangerous
  Jinja2
  MarkupSafe
  raven
  requests
  six
  Werkzeug

commands =
  py.test \
    --pep8 \
    --cov application \
    --cov-report xml \
    --junitxml=junit-{envname}.xml \
    test

2. setup.pyを準備
Toxにはsetup.pyが必ず必要らしいので、簡易的な物を作成します。



# -*- coding:utf-8 -*- 
from distutils.core import setup
setup(name='application name', 
  version='0.0.1',
  description='application description',
  author='auth user name',
  author_email='email@localhost.localhost', )
3. JenkinsサーバにToxをインストール
$ sudo pip install tox
ずらずらと・・・
$ sudo -u jenkins python -c "import tox; print tox.__version__"
今回は「1.9.0」がインストールされた様です。

4. jenkinsに「shiningpanda」「Cobertura Plugin」プラグインをインストール
・「shiningpanda」は、JenkinsでPythonを実行するためのプラグインです。
・「Cobertura Plugin」はカバレッジ集計用のプラグインです。

「Jenkinsの管理」→「プラグインマネージャ」→「利用可能」タブに進んで、「ShiningPanda Plugin」「Cobertura Plugin」にチェックを入れてインストールします。

5. JenkinsにPythonの設定
今回は、Python2.7とPython3.4を設定します。

「Jenkinsの管理」→「システムの設定」のなかに「Python」という項目があると思います。
「Python追加」から必要な分だけPythonの設定を入れて、保存。

各項目の設定 
 ・Name: Jenkinsで識別するための名前(何でもよさそう)
 ・Home or executable: Pythonの実行パス。「which python」等で確認して設定。


6. Jobの作成
「新規ジョブ作成」から「マルチ構成プロジェクトのビルド」を選択して、OK。
プロジェクト名はお好きな物を。


7. Jobの設定
6. で新規にジョブを作成した場合は、設定画面に遷移しているはずなので。(遷移していない人は、プロジェクト名を選択して、「設定」を押してください。)

設定画面の下の方にある項目を設定してきます。それ以外の項目は、GithubにコミットしたタイミングでJobを走らせたい場合は設定してください(ここでは割愛)。

次の3カ所を設定して、保存する。
・マトリックスの設定
 「軸の追加」→「Tox」を選択して、「py27」にチェック。「py34」にもチェックしたいが項目がない。。。

   仕方が無いので、「高度な設定」→「py34」と入力。

・ビルド
 「ビルド手順の追加」→「Tox Bulider」を選択し、「Configuration file」に「tox.ini」(デフォルトだった)になっていることを確認。

・ビルド後の処理
 「ビルド後の処理の追加」から次の2つを選択して設定する。

 ①「Cobertura カバレッジ・レポートの集計」
    Cobertura XMLレポート パターン: **/coverage.xml
    ※Pytestのカバレッジレポートは、「coverage.xml」で出力されるので。
 ②「JUnitテスト結果の集計」
    テスト結果XML: **/junit-*.xml
    ※tox.iniで設定したファイル名を指定。

 設定するとこんな感じになる。

8. あとは「ビルド実行」を押すだけ。

参考
http://d.hatena.ne.jp/kuma8/20121124/1353723982
http://tox.readthedocs.org/en/latest/example/jenkins.html
http://shiningpanda.com/tox-on-jenkins-with-shiningpanda-plugin.html


2015年3月21日土曜日

CentOS 7にPython3.4をインストール

2012年にCentOS 6.2 に Python 2.7.2をインストールしてから、気づけばOSもPythonも新しいバージョンに移行してました。

CentOS 7に更新したので、Python3.4をソースからインストールします。
元のPython2.x系は、CentOSで使っている(yumがPythonで書かれていたような、、、)ものはそのままにして、別に3.xを入れます。

1.インストールに必要なものをインストール
$sudo yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel openssl-devel

2.Pythonをダウンロードして解凍する
$ wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz
$ tar zxvf Python-3.4.3.tgz
3.インストール
今回は、「/usr/local/python34」配下にインストールします。
$ cd Python-3.4.3
$ ./configure --with-threads --enable-shared --prefix=/usr/local/python34
$ make
$ sudo make install

4.パス設定
$ vi ~/.bash_profile
下記を追加する。
export PATH=/usr/local/python34/bin:$PATH

5.エラー対策(x86_64の場合)
ここで,実行すると
python3: error while loading shared libraries: libpython3.4m.so.1.0: cannot open shared object file: No such file or directory
とエラーで動かない.コンパイルはされているので,シンボリックを貼る
$ sudo ln -s /usr/local/python34/lib/libpython3.4m.so.1.0 /lib64/

6.確認
$ python3 --version
Python 3.4.3と表示されれば成功