Help us understand the problem. What is going on with this article?

Python+FlaskなwebアプリをJenkinsでウイーン

More than 5 years have passed since last update.

(-_-).oO(タイトルは気にしない事、考えるの面倒なんだよ)

はじめに

Python+FlaskなwebアプリをJenkinsでビルドしまくるようにしたのでそのメモ。

ディレクトリ構成はこんな感じ(見せたくないディレクトリは消してます)。

% tree -d
.
├── env (virtual env)
├── project
│   ├── app
│   ├── conf
│   ├── logs
│   ├── models
│   │   └── mongo
│   ├── services
│   ├── static
│   ├── templates
│   ├── tests
│   │   ├── app
│   │   ├── cover
│   │   ├── data
│   │   ├── models
│   │   │   └── mongo
│   │   ├── services
│   │   ├── utils
│   │   └── view
│   └── utils
└── script
    ├── deploy (fabricとか)
    └── tools

トップディレクトリ直下にprojectというディレクトリがあり、その下にアプリケーションが全て展開されている。
また、projectディレクトリからnosetestsが実行でき、現時点でテストが全て通るようになっている。
また、coverageを導入しておき、カバレッジを取得できるようにしておく。
テストの実行方法は以下のとおり。

% source env/bin/activate
% cd project
% export PYTHONPATH=$PYTHONPATH:`pwd`
% nosetests -v -w tests/ --with-coverage --with-xunit --cover-package=app --cover-package=models --cover-package=services --cover-package=utils --cover-html --cover-xml

Jenkinsを立ち上げる前にやること

Jenkins内でvirtualenvで環境を整えるため、必ずpip freezeしたものをコミットしておくこと(もしくはshellでいちいち実行してもいいけどバージョンとか考えるとpip freezeが楽)。

% source env/bin/activate
% cd project
% pip freeze > requirements.txt
% git add requirements.txt
% git commit
% git push origin master

Jenkins側の作業

まず、使ってるVCSのプラグインとカバレッジ計測をするためにCoberturaプラグインをインストールする。

そして新しいジョブを作成して、ソースコード管理でレポジトリのパスを入力します。
次に、ビルドのビルド手順の追加からシェルの実行を選んで以下のように入力します。

if [ ! -d venv ]; then
  virtualenv --distribute venv
fi
source venv/bin/activate
cd project
pip install -r requirements.txt
export PYTHONPATH=$PYTHONPATH:$WORKSPACE/project
echo "設定のコピーとか事前にやることがあればここでやる"
nosetests -v -w tests/ --with-coverage --with-xunit --cover-package=app --cover-package=models --cover-package=services --cover-package=utils --cover-html --cover-xml
sed "s|filename=\"|filename=\"project/|g" $WORKSPACE/project/tests/coverage.xml > $WORKSPACE/project/tests/coverage2.xml

最後のsedはディレクトリ直下にソースコードがないため、カバレッジの方でソースコードが見れない問題を解決するため、カバレッジの計測結果のパスにトップディレクトリからの相対パスを追加します(参考: Hudson “Source code is unavailable.”)

次にビルド後の処理を2つ追加します。
一つはJUnitテスト結果の集計を追加して、テスト結果XMLに以下の内容をコピーします。

project/nosetests.xml

もう一つはCobertura カバレッジ・レポートの集計を追加して、Cobertura XMLレポート パターンに以下の内容をコピーします。

project/tests/coverage2.xml

これで保存をして、ビルドをぶん回します。

たぶん、ダッシュボードを見て幸せになれると思います。

smellman
クソです
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away