cactusman日誌 このページをアンテナに追加 RSSフィード

2012-04-16

[][][]Jenkins Violations PluginのPyflakes対応(PEP8の動作確認も)

ローカルで一応動いたので報告を。

f:id:cactusman:20120417025936p:image

使い方は、Jobの設定でPyflakesの項目が増えてるので、そこにPyflakesの出力結果ファイルを指定してください。

PyflakesはPylintみたいなアラートの種類や段階がないため、全部HIGHT(赤)にしています。


まだコミットできてはないですが、いち早く使ってみたい方はどうぞ。

http://dl.dropbox.com/u/191349/0.7.11-SNAPSHOT/violations.hpi

正式版については気長にお待ちください。


ちなみに、だいぶ前のPEP8対応もちゃんと動いています。

ただし、Django-Jenkins使う場合は、PEP8(とPyflakes)を全部Pylint形式に変換するみたいで、そこがはまりポイントかと。

2012-04-15

[][]Jenkins Mercurial Pluginで、毎回リポジトリクローンされる問題

表題とおり、特にリポジトリ初期化するような設定をしていないのに、毎回リポジトリクローンされることがあります。

その結果、いちからフルビルドして遅い、ということになるため、できれば解決したい問題です。

自分のところで発生した条件として、file://を使ってる場合でした。

他にも、似たような事例があるようです。

http://jenkins.361315.n4.nabble.com/Global-properties-and-SCM-td1153304.html

http://d.hatena.ne.jp/junkimu/20120222/1329998187


原因はローカルリポジトリが指し示しているリモートリポジトリが、そもそも違うものになっているかどうかをチェックするために行っている処理でした。

具体的には、'hg paths.default'コマンドを実行し、その出力結果をワークスペースにあるローカルリポジトリのパスと比較することをやっています。

リポジトリが違うと判定されると、毎回リポジトリクローンされます。


とりあえず、自分のところで発生した条件(file://)の場合については、JIRAに起票済みで、pull requestも出してます。

修正したプラグインは、以下においてます。

http://dl.dropbox.com/u/191349/1.39-SNAPSHOT/mercurial.hpi

1.459で確認しましたが、1.421以上のバージョンなら、問題ないはずです。


他の条件については、再現をさせないと確認しようがないので、自分の環境で起きたらそのつど対応しようと思っています。

どこを直せばいいかについては、ここのcanReuseWorkspaceメソッドを見てもらえればいいとおもいます。

2012-04-03

[][][]Pythonプロフェッショナルプログラミングを執筆する上で、継続的インテグレーション的なことをやったことについて

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

PythonプロフェッショナルプログラミングSphinx+Mercurial+Jenkins+Redmine+SkypeBotの組み合わせで執筆をしていました。

編集のほうで原稿にデザインをあててPDFにするため、最終成果物はその前段階の原稿になります。

それぞれの役割は以下になります

Mercurial, Redmine, SkypeBotについてはすでに会社に環境があるので、それをそのまま使っています。

Mercurialは「Pythonプロフェッショナルプログラミング」に書いてるようなフローでやってました。

また、章ごとにファイルを分割していたので、マージで問題になりにくい構造になっていました。

Redmineは主に情報共有用Wikiとタスク管理、進捗管理に使っていました。

Redmineのチケットはどの程度進んでいるのかを%で入力可能なため、また、親チケットは子チケットの割合を合計して出してくれるので、進捗管理としては便利でした。

SkypeBotはコミット時やRedmineのチケットの変更時に、執筆用のSkype部屋に通知がされるようになっています。

本当はJenkinsビルドした結果も通知したかったのですが、その辺設定をするのに時間を使いたくなかったので、今回は行っていません。

Sphinxについては清水川さんがbuildoutでインストールできるようにレシピを用意していただきました。

出力はHTMLPDF、最終成果物用のテキストになります。

ただ、PDFは最終成果物でないのですが、やっぱり本らしくなるとみんなのモチベーションがあがってたため、やっててよかったと思います。

Jenkinsでは、自分が設定していましたが、常時ビルドTODOの集計をやっていました。

意外とビルドできないということはあったので、これから複数人で本を執筆される方は確実にやったほうがいいです。

あと、TODOの集計は進捗管理的によかったです。

特に今回のように10人以上もかかわると、このような仕組みがなければ全体の把握がしにくい状況でした。

TODOの残り件数や、どこに多く残っているのか逆にどこがTODOがないのか、というのを見るだけでも、誰の進捗が悪くなってるのか、誰が進んでいるのかを把握できます。

また、JenkinsワークスペースビルドしたHTMLPDFがあるため、JenkinsのトップページやJobの画面の説明に、ドキュメントのリンク先を記述していました。

成果物が今どうなのかが手軽に確認ができて好評でした。

特に社内レビュー時に最新のものがどこにあるのか一目にわかるため、このやり方はよかったと思います。


以降、今回用にJenkinsサーバに何をしたのかを書いておきます。

Jenkinsインストールは、Debian6であったため、Jenkins公式のdebインストール方法で行いました。

Jenkinsサーバには、以下のものをインストールしてます。

サーバの設定として、文字化け対策として/etc/environmentに LANG="ja_JP.UTF-8", LC_ALL="ja_JP.UTF-8"追加してます。


Jenkinsプラグインには以下のものをインストールしてます。

  • Mercurial plugin
  • Task Scanner Plug-in
  • disk-usage plugin
    • 使用ディスク容量の確認用(JenkinsはDiskをかなり消費するため)

あと、JobConfigHistory Plugin は今回インストールしてないですが、インストールしたほうがいいものなので、お勧めします。


Jenkins自体の設定としては以下になります。

設定はこんな感じで意外と多そうに見えますが、やってみるとそんなに難しくないはずです。

わからないところがありましたら、個別に聞いてください。


最後に、こういうことをしていても、執筆作業というのは不慣れということもあり、やはり大変でした。

逆に、やっていないともっと大変だったと思います。

この記事が皆さんの参考になれば幸いです。

2012-03-28

[][][]Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

清水川さんのブログですでに紹介されていますので、目次などはそちらで読んでください。

ちなみに自分も関わっていまして、第9章:Jenkins継続的インテグレーションを担当*1しました。

PythonJenkinsを使いたいけど何をしたらいいかわかないという方なら、参考になる内容だと思います。


全体的にPythonプログラミングテクニック的なものではなく、Pythonという言語と開発環境を使う上でビープラウドではどういうノウハウでやっているか、ということがメインになっています。

なので、エキスパートPythonプログラミングとはアプローチが違った本になっていると思います。


余談ですが、この本はSphinx+Mercurial+Jenkinsという組み合わせで執筆していました。

今回のように多人数(10人以上)で執筆する上では、この組み合わせは大変良かったです。

何が良かったかなどは、後日ブログにてまとめようと思っています。

*1:自分以外にもoyakataも

2012-03-27

[]Jenkinsプラグインアップデートすると、アップデートがされない場合の対処

実際プラグインアップデートするとアップデートがされないということ起きましたが、id:ssogabeTweet通りにするとうまくいきました。