- 飯野卓見 (@troter)
- Mercurial, Java, Jenkins, Ruby, PHP, Emacs, etc
- TokyoMercurial という勉強会をやってます
- 社内勉強会用資料です。
- 初心者向け
- Jenkinsを知らない人
- Jenkinsの使い方がわからない人
- これからJenkinsを使う人
- Jenkins
- 導入するとどうなるか
- 導入の手順
- Tips
- 参考文献
- 今最も熱いCIサーバ
- CI(Continuous Integration) = 継続的インテグレーション
- 特徴
- セットアップが簡単
- プラグインで拡張可能
- 日本語OK
- アプリケーションの成果物を定期的に作成
- テストを定期的に実行
- デプロイを定期的に実行
- 成果物の作成(ビルド)
- ユニットテスト
- カバレッジ
- 静的ソースコード解析
- デプロイ
- その他、自動化出来る物すべて
- 誰かの環境がビルドマシン
- 特定の人しかビルド出来ない
- 特定のマシンしかビルド出来ない
- 開発用の設定が紛れ込むリスク
- 手動実行
- 成果物を取得する間作業出来ない
- 気軽にお願いできない
- ビルド環境が安定する
- そもそも自動化されていないとJenkinsを利用出来ない
- コマンド一発でビルド
- 人の手が入らないので設定が混ざることが無い
- 定期的にビルドしてくれる
- 自動実行
- ビルドすればデプロイされる
- 今デプロイされている物が常に最新
- デプロイ依頼とはなんだったのか
- デプロイ
- 1回平均 20分
- 1日平均 5回
- 1週間 5日
- 1ヶ月 4週
- 自動化してから2ヶ月
- 計算してみる
- 20分 * 5 * 5 * 4 * 2 = 4000分
- 4000分 = 66.6時間
- 66.6時間 = 8.3日
- デプロイを自動化して8.3日確保出来た
- デプロイ依頼に付随するコストもある
- 最新か調べるコスト(平均10分)
- デプロイ作業者の作業切り替えコスト(20分)
- 計算してみる
- (20 + 10 + 20) * 5 * 5 * 4 * 2 = 10000分
- 10000分 = 166.6時間
- 166.6時間 = 20.8日
- 20日以上の時間が確保出来る
- Jenkinsができることは誰でもできるようになる
- 定期実行で常に最新の状態になる
- 時間の節約→生産性が向上する
- 2ヶ月で20日以上の時間が節約できる
- 今後もずっと時間が節約されていく
- 導入が速いほど効果的
- 20日以上の時間はどこに行くのか
- Jenkinsのインストール
- コマンドから実行可能にする
- Jenkinsのマシンから実行可能にする
- ジョブを作成して定期実行
- http://jenkins-ci.org/
- ほとんどのOS用のパッケージが用意されている
- Windows
- Mac OS X
- Linux(RedHat系、Debian系)
- BSD(FreeBSD, OpenBSD)
- Solaris
- がんばって実行可能にして下さい
- Jenkinsは決まったコマンドを実行するだけしか出来ない
- マウスでぽちぽちはJenkinsから実行出来ない
- スクリプトを書く
- ShellScript(bash, posh, etc)
- LL(Ruby, Perl, Python, etc)
- ビルドツールを使う
- JVM(Ant, Maven, Gradle, sbt, leiningen, etc)
- MS(NAnt, MSBuild, etc)
- その他(Make, Rake, Scons, Omake, etc)
- デプロイツールを使う
- Jenkinsは自分が動作しているマシンでジョブを実行する
- 必要な物は全部インストールしよう
- バージョン管理システム
- 言語処理系
- ビルドツール
- デプロイツール
- などなど
- 「新規ジョブ作成」からジョブを作成
- フリースタイル
- Maven 2/3
- マルチ構成
- 外部ジョブの監視
- ジョブに自動化した手順を設定
- ジョブを定期実行
- Jenkinsの作業ディレクトリ
- クリーンビルド
- ビルドとデプロイの分離
- ビルドと時間のかかるジョブの分離
- プラグイン紹介
- 理由
- 以前のビルド結果の影響を受けないようにするため
- 設定ファイル混在などのリスクを回避するため
- 実現方法
- ビルドツールのクリーンタスクを実行
- もしくはジョブの設定でクリーンビルドを模倣にチェックを入れる
- mavenの場合は「専用のmavenリポジトリを使用する」にチェックを入れる
- 理由
- 変な物をデプロイしないようにする為
- デプロイするたびにビルドするのは時間がかかりすぎる為
- 実現方法
- ビルドするジョブの後続ジョブとしてデプロイするジョブを指定
- ビルドするジョブの成果物をCopy Artifact Pluginで取得
- デプロイするジョブでデプロイ
- 理由
- 時間のかかるジョブとは?
- 実現方法
- 時間のかかるジョブを別途作成
- 一日1回、深夜に実行
- Jenkinsはプラグインで機能を拡張出来る
- [Jenkinsの管理] -> [プラグインの管理] からインストール
- 実際にインストールしているプラグイン
- ソースコード管理システム系
- ビルド手順系
- ビルド後の処理系
- その他系
- 詳しい使い方は自分で調べてね
- Jenkinsができることは誰でもできるようになる
- 定期実行で常に最新の状態になる
- 時間の節約→生産性が向上する
- 2ヶ月で20日以上の時間が節約できる
- 今後もずっと時間が節約されていく
- 導入が速いほど効果的
- 20日以上の時間はどこに行くのか