ブログ

ryuzeeによるブログ記事。不定期更新

【書評】Jenkins(カエル本)

みなさんこんにちは。@ryuzeeです。

昨年チケット管理システム大決戦というイベントをShibuya.tracで行った際に一緒に登壇させて頂いた池田さん(@ikeike443)のご厚意で、オライリーさんから2月22日に発売されるJenkins本を献本頂きました。 ありがとうございます!

僕はアジャイルコーチとしてScrumをベースに現場のお手伝いをしています。 アジャイルな開発が必要な理由は、「継続的に顧客に価値を届けるため」で、エンジニアはプロとしてそれを行うことが求められています。 Scrumでは技術的なプラクティスについては何も定められていませんが、成長し続けるソフトウェアを継続的に顧客に届けるためには技術的なプラクティスなしには実現は難しいのが実情です。 特に自動化されたテストと継続的な統合なくして、スプリント単位で「出荷可能な製品」を届けることは相当に困難です(なのでVersionOne社の毎年の調査を見れば分かるとおり多くのチームがScrumとXPのハイブリッドなやり方を採用しています)。 またデプロイについても、高速化しつづけるビジネスサイクルに開発側は合わせられなければなりませんし、必要な時にいつでも簡単にリリースできる必要があります。 Jenkinsはそのようなことを実現する手助けとなるプラットフォームと言え、僕自身も、ユニットテスト、結合テスト、メトリクス収集、デプロイはJenkinsを利用して行っています。

本書ではJenkinsの基礎から順を追って最終的に継続的デリバリやプラグインの開発方法までJenkinsを利用するために必要な話が全て網羅されており、必携の一冊になると思います(ただし読み応えはすごいです。最初から通して読んでいこうとすると大変なことになっちゃう可能性があるので、リファレンスとして常に手元に用意しつつ、必要な時に必要な箇所を読むと良いのではないかと思います)。

ひとつだけ要望をあげるとすれば、本書はJavaやMavenが前提となっている箇所が多いのですが、LL言語系でも継続的インテグレーションは進んできているので、(PHPerとしては)PHPだったらどうなるみたいな話が書かれているとさらに便利だと思いました。

目次

  • 1章 Jenkinsの紹介
    • 1.1 はじめに
    • 1.2 継続的インテグレーションの基礎
    • 1.3 Jenkinsの紹介(旧名Hudson)
    • 1.4 HudsonからJenkinsへ——その略史
    • 1.5 JenkinsとHudsonのどちらを使うべきか?
    • 1.6 自分の組織への継続的インテグレーションの導入
      • 1.6.1 第1段階——ビルドサーバーがない
      • 1.6.2 第2段階——ナイトリービルド
      • 1.6.3 第3段階——ナイトリービルドと基本的な自動化テスト
      • 1.6.4 第4段階——メトリクスの導入
      • 1.6.5 第5段階——テストへのさらなる真剣な取り組み
      • 1.6.6 第6段階——自動受け入れテストと、さらなる自動化デプロイメント
      • 1.6.7 第7段階——継続的デプロイメント
    • 1.7 この後の行き先は?
  • 2章 Jenkins、はじめの一歩
    • 2.1 はじめに
    • 2.2 環境の準備
      • 2.2.1 Javaのインストール
      • 2.2.2 Gitのインストール
      • 2.2.3 GitHubアカウントのセットアップ
      • 2.2.4 SSH鍵の設定
      • 2.2.5 サンプルリポジトリのフォーク
    • 2.3 Jenkinsの起動
    • 2.4 ツール群の設定
      • 2.4.1 Mavenのセットアップ内容の設定
      • 2.4.2 JDKの設定
      • 2.4.3 通知
      • 2.4.4 Gitの設定
    • 2.5 初めてのJenkinsビルドジョブ
    • 2.6 初めてのビルドの実行
    • 2.7 さらなるレポート——Javadocの表示
    • 2.8 コードカバレッジやその他のメトリクスの追加
    • 2.9 まとめ
  • 3章 Jenkinsのインストール
    • 3.1 はじめに
    • 3.2 Jenkinsのダウンロードとインストール
    • 3.3 Jenkins用のビルドサーバーの準備
    • 3.4 Jenkinsのホームディレクトリ
    • 3.5 DebianあるいはUbuntuへのJenkinsのインストール
    • 3.6 Redhat、Fedora、CentOSへのJenkinsのインストール
    • 3.7 SUSEあるいはOpenSUSEへのJenkinsのインストール
    • 3.8 Jenkinsをスタンドアローンアプリケーションとして実行する
    • 3.9 Apacheサーバーの背後でJenkinsを実行する
    • 3.10 Jenkinsをアプリケーションサーバー上で動作させる
    • 3.11 メモリに関する考慮
    • 3.12 JenkinsをWindowsサービスとしてインストールする
    • 3.13 Jenkinsのホームディレクトリの内容
    • 3.14 Jenkinsのデータのバックアップ
    • 3.15 インストールされているJenkinsのアップグレード
    • 3.16 まとめ
  • 4章 Jenkinsサーバーの設定
    • 4.1 はじめに
    • 4.2 設定ダッシュボード——Jenkinsの管理画面
    • 4.3 システム環境の設定
    • 4.4 グローバルプロパティの設定
    • 4.5 JDK群の設定
    • 4.6 ビルドツールの設定
      • 4.6.1 Maven
      • 4.6.2 Ant
      • 4.6.3 シェルスクリプト言語
    • 4.7 バージョン管理ツールの設定
      • 4.7.1 Subversionの設定
      • 4.7.2 CVSの設定
    • 4.8 メールサーバーの設定
    • 4.9 プロキシの設定
    • 4.10 まとめ
  • 5章 ビルドジョブのセットアップ
    • 5.1 はじめに
    • 5.2 Jenkinsのビルドジョブ
    • 5.3 フリースタイルビルドジョブの作成
      • 5.3.1 一般的なオプション
      • 5.3.2 プロジェクトの高度なオプション
    • 5.4 ソースコード管理の設定
      • 5.4.1 Subversionの利用
      • 5.4.2 Gitの利用
    • 5.5 ビルドトリガ
      • 5.5.1 他のビルドジョブが完了したらビルドジョブを開始する
      • 5.5.2 スケジューリングされたビルドジョブ
      • 5.5.3 SCMのポーリング
      • 5.5.4 リモートからのビルドの開始
      • 5.5.5 手動のビルドジョブ
    • 5.6 ビルド手順
      • 5.6.1 Mavenのビルド手順
      • 5.6.2 Antのビルド手順
      • 5.6.3 シェルあるいはWindowsバッチコマンドの実行
      • 5.6.4 ビルド中でのJenkinsの環境変数の利用
      • 5.6.5 Groovyスクリプトの実行
      • 5.6.6 他の言語でのプロジェクトのビルド
    • 5.7 ビルド後の処理
      • 5.7.1 テスト結果のレポート
      • 5.7.2 ビルド結果のアーカイブ
      • 5.7.3 通知
      • 5.7.4 他のプロジェクトのビルド
    • 5.8 新しいビルドジョブの実行
    • 5.9 Mavenビルドジョブの利用
      • 5.9.1 依存するスナップショットがビルドされたときにビルド
      • 5.9.2 Mavenビルドの設定
      • 5.9.3 ビルド後の処理
      • 5.9.4 エンタープライズリポジトリ管理システムへのデプロイ
      • 5.9.5 商用エンタープライズリポジトリ管理システムへのデプロイ
      • 5.9.6 モジュールの管理
      • 5.9.7 Mavenビルドジョブでの追加のビルド手順
    • 5.10 他の言語でのJenkinsの利用
      • 5.10.1 Grailsを利用するプロジェクトのビルド
      • 5.10.2 Gradleを使ったプロジェクトのビルド
      • 5.10.3 Visual Studio MSBuildを使ったプロジェクトのビルド
      • 5.10.4 NAntを使ったプロジェクトのビルド
      • 5.10.5 Ruby及びRuby on Railsを使うプロジェクトのビルド
      • 5.11 まとめ
  • 6章 自動テスト
    • 6.1 はじめに
    • 6.2 ユニットテストと結合テストの自動化
    • 6.3 Jenkinsでのテストレポートの設定
    • 6.4 テスト結果の表示
    • 6.5 テストを無視する
    • 6.6 コードカバレッジ
      • 6.6.1 Coberturaでのコードカバレッジの測定
      • 6.6.2 Cloverによるコードカバレッジの計測
    • 6.7 自動化された受け入れテスト
    • 6.8 JMeterを使った自動パフォーマンステスト
    • 6.9 助けて! テストが遅すぎる!
      • 6.9.1 ハードウェアの追加
      • 6.9.2 実行する結合/機能テストを減らす
      • 6.9.3 テストの並列実行
    • 6.10 まとめ
  • 7章 Jenkinsのセキュリティ
    • 7.1 はじめに
    • 7.2 Jenkinsのセキュリティの有効化
    • 7.3 Jenkinsでの単純なセキュリティ
    • 7.4 ユーザー情報——Jenkinsのユーザーの識別
      • 7.4.1 Jenkinsの組み込みユーザーデータベースの利用
      • 7.4.2 LDAPリポジトリの利用
      • 7.4.3 Microsoft Active Directoryの使用
      • 7.4.4 Unixのユーザー及びグループの利用
      • 7.4.5 サーブレットコンテナの認証
      • 7.4.6 Atlassian Crowdの利用
      • 7.4.7 他のシステムとの統合
    • 7.5 権限管理——誰に何ができるのか
      • 7.5.1 行列ベースのセキュリティ
      • 7.5.2 プロジェクト単位の権限設定
      • 7.5.3 ロールベースの権限設定
    • 7.6 監査——ユーザーの動きの追跡
    • 7.7 まとめ
  • 8章 通知
    • 8.1 はじめに
    • 8.2 メールによる通知
    • 8.3 高度なメール通知
    • 8.4 ビルドへの対応の宣言
    • 8.5 RSSフィード
    • 8.6 ビルドラジエータ
    • 8.7 インスタントメッセージング
      • 8.7.1 JabberによるIM通知
      • 8.7.2 IRCによるIM通知
    • 8.8 IRCによる通知
    • 8.9 デスクトップ通知ツール
    • 8.10 Notifoからの通知
    • 8.11 モバイルの通知
    • 8.12 SMSによる通知
    • 8.13 音を鳴らす
    • 8.14 究極のフィードバックデバイス
    • 8.15 まとめ
  • 9章 コード品質
    • 9.1 はじめに
    • 9.2 ビルドプロセス中のコード品質
    • 9.3 Java及びGroovy用の一般的なコード品質解析ツール
      • 9.3.1 Checkstyle
      • 9.3.2 PMD/CPD
      • 9.3.3 FindBugs
      • 9.3.4 CodeNarc
    • 9.4 Violationsプラグインを使ったコード品質の問題のレポート
      • 9.4.1 フリースタイルビルドジョブの場合
      • 9.4.2 Mavenビルドジョブの場合
    • 9.5 Checkstyle、PMD、FindBugsレポートの利用
    • 9.6 コードの複雑度に関するレポート
    • 9.7 未解決タスクに関するレポート
    • 9.8 Sonarとの統合
    • 9.9 まとめ
  • 10章 高度なビルド
    • 10.1 はじめに
    • 10.2 パラメータ化ビルドジョブ
      • 10.2.1 パラメータ化ビルドジョブの作成
      • 10.2.2 パラメータ化されたビルドスクリプトを扱えるよう、ビルドを適応させる
      • 10.2.3 高度なパラメータ型
      • 10.2.4 Subversionのタグからのビルド
      • 10.2.5 Gitタグからのビルド
      • 10.2.6 リモートからのパラメータ化ビルドジョブの開始
      • 10.2.7 パラメータ化されたビルドジョブの履歴
    • 10.3 パラメータ化されたトリガ
    • 10.4 マルチ構成ビルドジョブ
      • 10.4.1 マルチ構成ビルドジョブのセットアップ
      • 10.4.2 スレーブの軸の設定
      • 10.4.3 JDKの軸の設定
      • 10.4.4 ユーザー定義の軸
      • 10.4.5 マルチ構成ビルドの実行
    • 10.5 Mavenビルドジョブの自動生成
      • 10.5.1 ジョブの設定
      • 10.5.2 継承によるジョブ設定の再利用
      • 10.5.3 プラグインのサポート
      • 10.5.4 フリースタイルジョブ
    • 10.6 ビルドの協調
      • 10.6.1 Jenkinsにおける並列ビルド
      • 10.6.2 依存グラフ
      • 10.6.3 合流
      • 10.6.4 ロックとラッチ
    • 10.7 ビルドパイプラインとプロモーション
      • 10.7.1 M2ReleaseプラグインでのMavenリリースの管理
      • 10.7.2 成果物のコピー
      • 10.7.3 ビルドのプロモーション
      • 10.7.4 テスト結果の集約
      • 10.7.5 ビルドパイプライン
    • 10.8 まとめ
  • 11章 分散ビルド
    • 11.1 はじめに
    • 11.2 Jenkinsの分散ビルドアーキテクチャ
    • 11.3 Jenkinsにおけるマスター/スレーブの方針
      • 11.3.1 マスターによるSSHを使ったスレーブの起動
      • 11.3.2 Java Web Startを利用した、手動によるスレーブの起動
      • 11.3.3 JenkinsスレーブのWindowsサービスとしてのインストール
      • 11.3.4 ヘッドレスモードでのスレーブノードの起動
      • 11.3.5 リモートサービスとしてのWindowsスレーブの起動
    • 11.4 スレーブあるいはスレーブのグループへのビルドジョブの関連づけ
    • 11.5 ノードのモニタリング
    • 11.6 クラウドコンピューティング
      • 11.6.1 Amazon EC2の利用
    • 11.7 CloudBeesのDEV@cloudサービスの利用
    • 11.8 まとめ
  • 12章 自動化デプロイメントと継続的デリバリ
    • 12.1 はじめに
    • 12.2 自動化された継続的デプロイメントの実装
      • 12.2.1 デプロイメントスクリプト
      • 12.2.2 データベースの更新
      • 12.2.3 スモークテスト
      • 12.2.4 変更のロールバック
    • 12.3 アプリケーションサーバーへのデプロイメント
      • 12.3.1 Javaアプリケーションのデプロイ
      • 12.3.2 RubyやPHPといったスクリプトベースのアプリケーションのデプロイ
    • 12.4 まとめ
  • 13章 Jenkinsのメンテナンス
    • 13.1 はじめに
    • 13.2 ディスク領域のモニタリング
      • 13.2.1 Disk Usageプラグインの使用
      • 13.2.2 ディスク使用量とJenkinsのMaven用プロジェクト
    • 13.3 サーバーの負荷のモニタリング
    • 13.4 設定のバックアップ
      • 13.4.1 Jenkinsのバックアップの基礎
      • 13.4.2 Backupプラグインの利用
      • 13.4.3 より軽量な自動化バックアップ
    • 13.5 ビルドジョブのアーカイブ処理
    • 13.6 ビルドジョブの移行
    • 13.7 まとめ
  • 付録A ユニットテストと結合テストの自動化
    • A.1 Mavenによるテストの自動化
    • A.2 Antによるテストの自動化
  • 付録B プラグインの開発
    • B.1 プラグインの開発
      • B.1.1 作成するプラグイン
      • B.1.2 プラグイン開発環境のセットアップ
      • B.1.3 Play! Frameworkプラグインのコードを取得する
    • B.2 プラグインの構成
      • B.2.1 拡張ポイント
    • B.3 Builderを開発する
    • B.4 Recorderを開発する
    • B.5 テスト結果ページを追加する
    • B.6 プラグインをリリースしよう
    • B.7 ローカルのJenkinsにリリースする
    • B.8 Jenkins Plugin Managerにリリースする
      • B.8.1 Jenkinsメーリングリストに投稿する
      • B.8.2 リリースの準備をする
      • B.8.3 全世界にリリースする
    • B.9 プラグインのWikiを作成する
    • B.10 詳しい情報
  • 索引

アジャイルコーチングやトレーニングを提供しています

株式会社アトラクタでは、アジャイル開発に取り組むチーム向けのコーチングや、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください。

詳細はこちら