LoginSignup
19
17

More than 5 years have passed since last update.

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

Posted at

(-_-).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

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

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

19
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17