Jenkins勉強会 札幌
CI概論 @cactusman
CI
- 頻繁にビルドしろ
- ナイトリビルド、デイリビルドの延長線上
- 自動ビルド、自動テストを推奨
広まらない理由
- SCM必須
- テスト必須
- CIサーバ
- チームメイトの理解
あるといいもの
- BTS
- インスペクション
- XFD (eXtreme Feedback Device)
CIは最近流行ってきている
- EC2, VPS
- XPの浸透
- Jenkinsなどのツール類の発展
- ノウハウ
問題やパターン
スローテスト問題
- テスト実行に時間がかかりすぎる
- テスト実行数の増加
- 非効率なテスト
- 依存関係
- システムテスト的なもの
- ビルド自体も同様
解消方法
- テスト自体のパフォーマンスチューニング
- TDD的なテストは捨てる
- DBなどはモック化、インメモリ化
- 実行単位のスケジュール
- 実行単位の細分化して、並列性をあげる
- スケールアップ
- スケールアウト
狼少年問題
- テストが通らない、インスペクションでの警告が常用化
- OSSでも割とある
解消方法
- 状態を把握する
- テストの失敗や警告の増減に注目
- テストの最小化
- やる必要があるかどうか常に考える
- 問題のあったところ、デグレードしたところを重点的に
- インスペクションで問題のない箇所はレビュー後にignoreにする
Pre-Tested Commit
- コミットする前にテストを実行するパターン
- CIサーバに差分を送って、テスト等を行う
- オールグリーンならコミット、レッドならコミットできない
- TeamCity(IntelliJ IDEA)で機能あり
- Jenkinsでも要望がある
- DVCSで代用することも可能?
Jenkins概論 @cactusman
Jenkins
- OSSのCIツール
- 簡単、手軽、親切
- プラグインで機能拡張
- 各OSごとにインストーラがある
- CIのデファクト?
Jenkisの役割
- チェックアウト
- ビルドスケジュールの管理
- 1時間間隔とか
- 通知
- レポーティング
- ログの保存
よくある誤解
- JenkinsがJavaだから、Javaしか扱えないんでしょ
- Java知らないです
誤解への回答
- Javaの知識はなくてもいい
- ビルドにsh, batを使える
高度な機能
- トリガー
- plugin
- wikiを見てから聞け
- Jobのチェーン
- A -> B -> C, B -> D
- CLI
- クラスタリング
- マスタ/スレーブ形式
- RESTのAPI
QA
- サーバの移行は?
- .jenkinsを固めて、転送する
Trac + Jenkinsで始めるCIのある開発 @shuji_w6e
自己紹会
- @shuji_w6e
- Blog やさしいデスマーチ
Jenkinsと私
- 2009年末に個人的に導入
- 2010年夏ごろ、社内開発環境で導入
現代のソフトウェア開発の特性
- 複雑性
- 短納期
- 超大規模または超小規模
- 開発手法の変化
現代ソフトウェア開発の3本柱
- バージョン管理
- テスティング
- 自動化
- (チケット管理システム)
導入の手順
- バージョン管理
- チケット
- テスト
- 自動化
バージョン管理とテスティング
- 効果的な自動化に必要な要素
- 継続的なテストとフィードバック
- テスト != 品質保証
- その他の自動化
- ビルド、パッケージング、デプロイ
- 静的解析、ドキュメンテーション
導入事例
開発の流れ
- tracで作業を洗いだしてチケット化
- Eclipse等でコードを書く
- 可能なかぎりユニットテストを行う
- TDDとペアプロ
- Subversionにコミット
- CIでテストが通るか確認する
- Tracのチケットをクローズ
開発の流れ 自動化部分
- Subversionにコミット
- JenkinsCIにコミットを通知
- Mavenによるビルド・テストの実行
- 成功時はパッケージを作成
- ビルド/テスト失敗時は、IRC/メールに通知
変化したこと
- Tracの活用により作業漏れが減った
- ファイルサーバのExcelは見ない
- コミット間隔が細かくなった
- ユニットテストを実施している部分の品質があがった
- JenkinsCIが常に監視しているので、問題が起きた場合にすぐ解るようになった
- 開発に集中できるようになった
導入まで
- 「よく解らない」に対する抵抗
- メリットが説明・理解させにくい
- やってみれば解る
- 効果が出るまで時間がかかる
- ある程度は強引に導入
導入に失敗しないため
- 導入失敗時には「次」はない
- 同調できる仲間を作っておく
- ノウハウを勉強会や書籍で勉強する
- 実際に手を動かして使ってみる
- 導入経験のある人を巻き込む
導入事例まとめ
- 開発スタイルは「文化」
- 内部の「文化」は変えられる
- メンバーの半分の意識が変われば自然に変われる
- 1/6から2/6は大変
- 3/6から4/6はそうでもない
構成事例
TracからJenkinsへ
- HudsonTracPlus プラグイン
- タイムラインにビルド結果を通知
- Jenkinsのビルドページへのリンクとかwikiフォーマット
JenkinsからTracへ
- Trac プラグイン
- コミットログからTracへのリンク
Windowsサーバの場合
- Trac Lightning
Google Code
- バージョン管理、チケットはGoogle
- VPSでJenkins
Maven
- Javaはつかないので省略
デモ中の質問等
- Jenkins自体で256MBくらい
- ジョブは別プロセスで動かすのでオーバーヘッドがあるかも
- CPUはそこまでいらないかも
Jenkins Plugin開発、ハック(@cactusman)
core, pluginのハックの前に
- shell script等で対応できないか
- 今ある機能でなんとかなるか
- coreよりもpluginでいいのではないか
- 拡張ポイントを見てから
Jekinsのビルドとハック
必要なもの
- jdk6
- Maven
ビルド
- git clone hogehoge
- cd jenkins
- mvn install -Dskip-test-harness的ななんか
- 詳しくはwiki
IDEでの開発
- NetBeans(6.7+)
- Eclipse
- IDEA
URLマッピングはStapler
- ViewはApache Jellyによって記述
- GroovyやJRubyが使用可能
Pluginの作り方
- 公式Pluginを参考にする
- チュートリアルがwikiにある https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial
オススメぽいPlugin
- Task Scanner Plugin
- XXX、TODOとか攫ってくれる
- Change Log History Plugin
- Jenkinsの設定を変更した時に変更履歴を見れる
0 件のコメント:
コメントを投稿