Source

timstudy-201202-jenkins-introduction / index.rst

Full commit

Jenkins


自己紹介

  • 飯野卓見 (@troter)
    • 株式会社タイムインターメディア所属
  • Mercurial, Java, Jenkins, Ruby, PHP, Emacs, etc
  • TokyoMercurial という勉強会をやってます

はじめに

  • 社内勉強会用資料です。
  • 初心者向け
    • Jenkinsを知らない人
    • Jenkinsの使い方がわからない人
    • これからJenkinsを使う人

内容

  • Jenkins
  • 導入するとどうなるか
  • 導入の手順
  • Tips
  • 参考文献

Jenkins


Jenkinsとは

  • 今最も熱いCIサーバ
    • CI(Continuous Integration) = 継続的インテグレーション
  • 特徴
    • セットアップが簡単
    • プラグインで拡張可能
    • 日本語OK

継続的インテグレーション

  • アプリケーションの成果物を定期的に作成
  • テストを定期的に実行
  • デプロイを定期的に実行

Jenkinsの適応範囲

  • 成果物の作成(ビルド)
    • アプリケーション
    • ドキュメント
  • ユニットテスト
  • カバレッジ
  • 静的ソースコード解析
  • デプロイ
  • その他、自動化出来る物すべて

導入するとどうなるか


Jenkinsでビルドしない場合

  • 誰かの環境がビルドマシン
    • 特定の人しかビルド出来ない
    • 特定のマシンしかビルド出来ない
    • 開発用の設定が紛れ込むリスク
  • 手動実行
    • 成果物を取得する間作業出来ない
    • 気軽にお願いできない

Jenkinsでビルドする場合

  • ビルド環境が安定する
    • そもそも自動化されていないとJenkinsを利用出来ない
    • コマンド一発でビルド
    • 人の手が入らないので設定が混ざることが無い
  • 定期的にビルドしてくれる
    • 人にビルドを頼まなくて良い
    • 人のリソースの節約

Jenkinsでデプロイしない場合

  • 手動実行
    • これっていつデプロイした?
  • 頻発するデプロイ依頼
    • 30分に1度のデプロイ
    • 何も作業できない

Jenkinsでデプロイする場合

  • 自動実行
    • ビルドすればデプロイされる
    • 今デプロイされている物が常に最新
  • デプロイ依頼とはなんだったのか

効果を計算してみよう


計算してみよう(1)

  • デプロイ
    • 1回平均 20分
    • 1日平均 5回
    • 1週間 5日
    • 1ヶ月 4週
    • 自動化してから2ヶ月
  • 計算してみる
    • 20分 * 5 * 5 * 4 * 2 = 4000分
    • 4000分 = 66.6時間
    • 66.6時間 = 8.3日

計算してみよう(2)

  • デプロイを自動化して8.3日確保出来た
    • これはデプロイの時間だけ
  • デプロイ依頼に付随するコストもある
    • 最新か調べるコスト(平均10分)
    • デプロイ作業者の作業切り替えコスト(20分)
  • 計算してみる
    • (20 + 10 + 20) * 5 * 5 * 4 * 2 = 10000分
    • 10000分 = 166.6時間
    • 166.6時間 = 20.8日
  • 20日以上の時間が確保出来る

導入するとどうなるか

  • Jenkinsができることは誰でもできるようになる
    • ビルドとデプロイ
    • ボタンを押すだけ
  • 定期実行で常に最新の状態になる
    • 今のアプリケーション、資料だけ確認すればよい
  • 時間の節約→生産性が向上する
    • 2ヶ月で20日以上の時間が節約できる
    • 今後もずっと時間が節約されていく
    • 導入が速いほど効果的
  • 20日以上の時間はどこに行くのか
    • 別の作業を行う
    • 定時で帰る

導入の手順


導入の手順

  1. Jenkinsのインストール
  2. コマンドから実行可能にする
  3. Jenkinsのマシンから実行可能にする
  4. ジョブを作成して定期実行

1.Jenkinsのインストール

  • http://jenkins-ci.org/
  • ほとんどのOS用のパッケージが用意されている
    • Windows
    • Mac OS X
    • Linux(RedHat系、Debian系)
    • BSD(FreeBSD, OpenBSD)
    • Solaris

2.コマンドから実行可能にする

  • がんばって実行可能にして下さい
    • 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)
  • デプロイツールを使う
    • Capistrano, Fabric, etc

3.Jenkinsのマシンから実行可能にする

  • Jenkinsは自分が動作しているマシンでジョブを実行する
    • 当たり前ですが忘れがちな事
  • 必要な物は全部インストールしよう
    • バージョン管理システム
    • 言語処理系
    • ビルドツール
    • デプロイツール
    • などなど

4. ジョブを作成して定期実行

  • 「新規ジョブ作成」からジョブを作成
    • フリースタイル
    • Maven 2/3
    • マルチ構成
    • 外部ジョブの監視
  • ジョブに自動化した手順を設定
    • VCSの設定
    • ビルド手順
    • 後処理
    • などなど
  • ジョブを定期実行

Tips


Tips

  • Jenkinsの作業ディレクトリ
  • クリーンビルド
  • ビルドとデプロイの分離
  • ビルドと時間のかかるジョブの分離
  • プラグイン紹介

Jenkinsの作業ディレクトリ

  • デフォルト
    • 実行ユーザの~/.jenkinsディレクトリ
  • 明示する場合
    • 環境変数の JENKINS_HOME
    • システムプロパティの JENKINS_HOME
    • JNDIの JENKINS_HOME
  • 参考 Administering Jenkins

クリーンビルド

  • 理由
    • 以前のビルド結果の影響を受けないようにするため
    • 設定ファイル混在などのリスクを回避するため
  • 実現方法
    • ビルドツールのクリーンタスクを実行
    • もしくはジョブの設定でクリーンビルドを模倣にチェックを入れる
    • mavenの場合は「専用のmavenリポジトリを使用する」にチェックを入れる

ビルドとデプロイの分離

  • 理由
    • 変な物をデプロイしないようにする為
    • デプロイするたびにビルドするのは時間がかかりすぎる為
  • 実現方法
    • ビルドするジョブの後続ジョブとしてデプロイするジョブを指定
    • ビルドするジョブの成果物をCopy Artifact Pluginで取得
    • デプロイするジョブでデプロイ

ビルドと時間のかかるジョブの分離

  • 理由
    • 時間がかかるから
  • 時間のかかるジョブとは?
    • カバレッジ取得
    • 静的ソース解析
    • などなど
  • 実現方法
    • 時間のかかるジョブを別途作成
    • 一日1回、深夜に実行

プラグイン紹介

  • Jenkinsはプラグインで機能を拡張出来る
    • [Jenkinsの管理] -> [プラグインの管理] からインストール
  • 実際にインストールしているプラグイン
    • ソースコード管理システム系
    • ビルド手順系
    • ビルド後の処理系
    • その他系
  • 詳しい使い方は自分で調べてね

ソースコード管理システム系プラグイン





まとめ


導入するとどうなるか

  • Jenkinsができることは誰でもできるようになる
    • ビルドとデプロイ
    • ボタンを押すだけ
  • 定期実行で常に最新の状態になる
    • 今のアプリケーション、資料だけ確認すればよい
  • 時間の節約→生産性が向上する
    • 2ヶ月で20日以上の時間が節約できる
    • 今後もずっと時間が節約されていく
    • 導入が速いほど効果的
  • 20日以上の時間はどこに行くのか
    • 別の作業を行う
    • 定時で帰る

みんな使いましょう



ご静聴ありがとうございました


質疑応答