この記事で説明すること
要するにこういうこと
コード解析には checkstyle と Findbugs を使用する。
また、大量の警告メッセージが Github にコメントされるのを防ぐため、
masterブランチと比較して差分のあるファイルに対する警告だけをコメントするようにする。
前提
- Github のリポジトリは作成済みであること。
- 分析対象リポジトリのビルドスクリプトも作成済みであること(本記事では ant を利用している)。
- checkstyle の設定ファイルも、
checkstyle.xml
という名前でリポジトリに追加済みであること。
手順
1. Gemfileを配置する。
以下のように記述し、プロジェクトのトップディレクトリに保存する。
source 'https://rubygems.org'
gem 'findbugs_translate_checkstyle_format', '>= 0.2.6'
gem 'checkstyle_filter-git'
gem 'saddler'
gem 'saddler-reporter-github'
2. コード解析を実行するシェルを記述する
以下のようなシェルを、プロジェクトのトップディレクトリに保存する。
# !/bin/bash
set -v
# master ブランチを分析対象から除外する。
DEFAULT_BRANCH="master"
if [ "${CIRCLE_BRANCH}" != "${DEFAULT_BRANCH}" ]; then
# .java ファイルに変更がなければ、動作を終了する。
LIST=`git diff --name-only origin/${DEFAULT_BRANCH} | grep -e '.java$'`
if [ -z "$LIST" ]; then
echo "No java file has changed."
exit 0
fi
# checkstyle による分析を実行する。(※)
echo $LIST \
| xargs java -Duser.language=ja -classpath $HOME/checkstyle/checkstyle-6.19-all.jar com.puppycrawl.tools.checkstyle.Main -c checkstyle.xml -f xml -o result.xml
bundle exec checkstyle_filter-git diff origin/${DEFAULT_BRANCH} < result.xml \
| bundle exec saddler report \
--require saddler/reporter/github \
--reporter Saddler::Reporter::Github::CommitReviewComment
# Findbugs による分析を実行する。
java -Duser.language=ja -jar $HOME/findbugs/lib/findbugs.jar -textui -sourcepath src/ -xml bin/ \
| bundle exec findbugs_translate_checkstyle_format translate \
| bundle exec checkstyle_filter-git diff origin/${DEFAULT_BRANCH} \
| bundle exec saddler report \
--require saddler/reporter/github \
--reporter Saddler::Reporter::Github::CommitReviewComment
fi
exit 0
※ http://qiita.com/kmotoki/items/3b819175860328a0374d
3. circle.yml を記述する
以下のように記述し、プロジェクトのトップディレクトリに保存する。
machine:
timezone: Asia/Tokyo
ruby:
version: 2.2.0
java:
version: openjdk7
environment:
_JAVA_OPTIONS: "-Xms1024m -Xmx2048m"
dependencies:
override:
- gem update bundler
- gem install --no-document findbugs_translate_checkstyle_format checkstyle_filter-git saddler saddler-reporter-github
- mkdir $HOME/checkstyle
- curl -sL https://sourceforge.net/projects/checkstyle/files/checkstyle/6.19/checkstyle-6.19-bin.tar.gz | tar xz --strip=1 -C $HOME/checkstyle
- mkdir $HOME/findbugs
- curl -sL http://prdownloads.sourceforge.net/findbugs/findbugs-3.0.1.tar.gz | tar xz --strip=1 -C $HOME/findbugs
compile:
override:
- ant -buildfile build.xml
test:
override:
- ./run_static_analyzer.sh
4. Github のアクセストークンを作成する
Github のプロフィールページから"Edit profile" - "Personal access tokens"ページに遷移する。
右上の"Generate new token"ボタンをクリックする。
"Select scopes"欄から、"repo"にチェックを付け、一番下の"Generate token"ボタンをクリックする。
("Token description"欄への入力は任意)
生成されたアクセストークンが表示されるので、メモしておく。
なお、一度 作成したアクセストークンの値を後で確認することはできない。
絶対に失くさないこと。
5. CircleCI 上にプロジェクトを作成する。
左のメニューの"Projects"ボタンをクリックし、右上の"Add project"ボタンをクリックする。
作成したいプロジェクトを選択する。
6. アクセストークンを登録する。
勝手にビルドが始まるが、無視して右上の"Project Settings"ボタンをクリックする。
"Environment Variables" - "Add Variable"ボタンをクリックし、
以下の値を登録する。
- Name : 'GITHUB_ACCESS_TOKEN'
- Value : 手順3. で作成したアクセストークン
以上
参考
以下のツールを利用させていただいております。
ツールの作成者に感謝します。
CheckstyleFilter::Git
Saddler
Saddler::Reporter::Github
FindbugsTranslateCheckstyleFormat
サンプルのリポジトリ↓ https://github.com/kmotoki/circleci_sample/commit/ffb91e16d62055665af8a9208bbd0ca7b8b6d225