WEB+DB PRESS plusシリーズJenkins実践入門
~ビルド・テスト・デプロイを自動化する技術

[表紙]Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術

A5判/336ページ

定価(本体2,780円+税)

ISBN 978-4-7741-4891-5

ただいま弊社在庫はございません。

本書の新版が発行されています。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

ビルドやテストを自動化し,問題発見を容易にして,品質の高いソフトを効率的に開発するためのツールとして,あのApache Software Foundationでも多くのプロジェクトで利用されているJenkins。

本書はインストールなどの基本から,JUnitによるテスト,カバレッジの取得,インスペクション,コードステップ数のカウント,分散ソースコード管理システムやバグトラッカーとの連携,メールやTwitterへの通知など,Jenkinsを実開発で使うためのポイントを解説。

さらに分散ビルド,成果物のデプロイ,Seleniumによる結合テストの自動化などの高度なトピック,バージョンアップ,チューニング,データ領域の変更,セキュリティへの配慮,バックアップとリストア,ログ管理など運用管理の方法もおさえました。

Jenkinsの生みの親・川口耕介氏も推薦の1冊。

こんな方におすすめ

  • 開発プロジェクトの効率化・品質向上に興味のあるエンジニア

著者の一言

Jenkinsは,世界中で広く使われている継続的インテグレーションサーバです。拡張性が高く,日本語化が進んでおり,活発なコミュニティもあるお陰で,日本でもJenkinsの認知度は高いと思っています。しかし,実際に現場に適用しようと思った時に,拡張性・自由度の高さがかえって仇になって,「どうしたらいいのかわからない」という声もよく耳にします。ちょうど「レゴブロックが箱一杯にあるけれども,どうやったら家を作れるかわからない」というような状態です。

ソフトウェアを書く作業にはある種の才能,努力,時間が必要です。しかし,そのソフトウェアという「点」を普及させ,実際に世の中の役に立つ「面」に広げるのも別種の才能,努力,時間が不可欠です。海の向こうから,日本でJenkinsを点から面へ広げる上で,私はある種の手詰まりを感じていました。

NTTデータの佐藤さんのチームに声をかけていただいたのはそんな時でした。佐藤さんのチームではNTTデータの社内向けに開発環境やプロセスの整備を進めており,Jenkinsもその一環として使ってらっしゃるとのことでした。

本書は,そんな佐藤さんのチームがNTTデータの現場のプロジェクトと日々接する中で培った経験から生まれました。先進的な技術を現場に導入する ―― 実用的な,現場指向の本を生み出すために,これ以上優れた環境は考えられません。

本書には,そんな「点を面に広げる洞察」が溢れています。レゴブロックをこうやって組み立てればまずは家が建つ,という道筋がきちんと示されています。これをまずスタートにして,そこから読者が各自自分好みに部分部分を作り替えていける自由度はJenkinsが持っています。実際にJenkinsを仕事に組み込む上で,この本が役に立つと確信しています。

川口耕介
Jenkins プロジェクトリード
CloudBees, Inc. アーキテクト

本書に関するお知らせ

本書に関連する記事を公開しております。

目次

  • 本書の刊行に寄せて 川口耕介
  • はじめに

第1章 継続的インテグレーションとJenkins

1.1 継続的インテグレーションとは

  • 1.1.1 手動ビルドとビルドツールの限界
  • 1.1.2 継続的インテグレーションと5つのメリット
  • コラム 継続的インテグレーションはXPから生まれた
  • 1.1.3 継続的インテグレーションの4つの疑問
  • 1.1.4 とあるチームの結合テスト

1.2 継続的インテグレーションに必要なもの

  • 1.2.1 必要となる6つのツール
  • 1.2.2 必要となる2つの機能

1.3 Jenkinsとは

  • 1.3.1 Jenkinsの6つのメリット
  • 1.3.2 Jenkinsの歴史
  • コラム Jenkinsコミュニティに参加する3つの方法

第2章 インストールと設定

2.1 Jenkinsをインストールする

  • 2.1.1 Windows Server 2008にインストールする
  • 2.1.2 CentOSにインストールする
  • 2.1.3 Tomcatにインストールする
  • コラム jenkins.warの簡単インストール
  • 2.1.4 Subversionをインストールする
  • コラム Subversionを始めるために最低限知っておきたい4つの概念
  • コラム WindowsのSubversionクライアントツール「TortoiseSVN」
  • 2.1.5 Subversionのリポジトリを作成する

2.2 Jenkinsの初期設定

  • 2.2.1 ビルド結果をメール通知する
  • 2.2.2 Maven/Ant/JDKを自動的にインストールする
  • コラム Apacheの後ろでJenkinsを動かそう

第3章 ジョブを作ってビルドする

3.1 ジョブを作る

  • 3.1.1 STEP1.新規ジョブを作成する
  • 3.1.2 STEP2. ソースコード管理システムを設定する
  • コラム 複数リポジトリからのチェックアウトを指定するには
  • 3.1.3 STEP3.ビルドトリガを設定する
  • コラム cronの設定書式
  • コラム SubversionからJenkinsのビルドをトリガーする
  • 3.1.4 STEP4. ビルドタスクを設定する
  • 3.1.5 STEP5. ビルド後の処理を設定する
  • コラム クエスチョンマーク

3.2 ビルドして結果を確認する

  • 3.2.1 ビルドを実行する2つの方法
  • 3.2.2 手動でビルドする
  • コラム そのほかの方法でビルドするには
  • 3.3 結果を確認する
  • 3.3.1 ビルドの状態を確認する
  • 3.3.2 ビルド結果画面を確認する
  • 3.3.3 コンソール出力を確認する
  • 3.3.4 ジョブを削除する

第4章 本番を想定して開発環境を準備する

4.1 開発を始める前に

  • 4.1.1 モデルプロジェクト
  • 4.1.2 Subversionにプロジェクトデータを登録する
  • コラム trunk,branches,tagsとは
  • 4.1.3 AntとJDKを設定する
  • コラム ビルドツール/JDKを手動でインストールするには
  • 4.1.4 Eclipseを準備する
  • 4.1.5 プラグインをインストールする
  • コラム 社外のネットワークに接続するときのHTTP Proxyの設定

4.2 ビルドしてみよう

  • 4.2.1 手動でビルドしてみよう

第5章 JUnitでテストする

5.1 ユニットテストを自動化する意味

  • 5.1.1 クライアント環境で実施しないメリット
  • 5.1.2 なぜユニットテストを自動化すべきか
  • 5.1.3 テストコードを作成する手間がかからないか

5.2 JenkinsでJUnitコードを実行する

  • 5.2.1 ビルドスクリプトを設定する
  • 5.2.2 ビルドを実行する

5.3 テスト結果を集計する

  • 5.3.1 集計機能を利用する
  • 5.3.2 失敗したテストの詳細を確認する

第6章 カバレッジを取得する

6.1 カバレッジの取得を自動化する意味

  • 6.1.1 カバレッジとは
  • 6.1.2 なぜJenkinsでカバレッジを取得するのか

6.2 Coberturaを実行する

  • 6.2.1 ビルドスクリプトを設定する
  • 6.2.2 ジョブを設定する
  • 6.2.3 カバレッジ・レポートを確認する
  • 6.2.4 テストを追加する
  • 6.2.5 テスト追加後の結果を確認する

第7章 インスペクションを実施する

7.1 インスペクションを自動化する前に

  • 7.1.1 Jenkinsでインスペクションを実施する意味
  • 7.1.2 インスペクションに利用するツール

7.2 インスペクションを実行する

  • 7.2.1 ビルドスクリプトを設定する
  • 7.2.2 ジョブを設定する
  • 7.2.3 警告を確認する
  • 7.2.4 警告に従ってソースコードを修正する

第8章 コードステップ数をカウントする

8.1 コードステップ数をカウントする理由

  • 8.1.1 コードステップ数からわかること
  • 8.1.2 コードステップをカウントするためのツール

8.2 コードステップ数を測定する

  • 8.2.1 ビルドスクリプトを設定する
  • 8.2.2 ジョブを設定する
  • 8.2.3 コードステップ数の推移グラフを確認する
  • 8.2.4 レポートから状況を分析する

第9章 設定のポイント

9.1 ビルドの実行数を制御する

  • 9.1.1 なぜビルド数を制御する必要があるか
  • 9.1.2 同時ビルド数を設定する

9.2 セキュリティのためのユーザー管理

  • 9.2.1 ユーザーを管理する
  • コラム LDAPで接続できる代表的なソフトウェア
  • コラム おすすめプラグイン「reverse-proxy-auth-plugin
  • 9.2.2 権限を設定する
  • コラム おすすめプラグイン「Jenkins Job Configuration History Plugin」

9.3 上流/下流プロジェクトの設定

  • 9.3.1 下流プロジェクトの設定
  • 9.3.2 上流プロジェクトの設定
  • コラム おすすめプラグイン「Copy Artifact Plugin」

9.4 ビルド結果をさまざまな経路で通知させる

  • 9.4.1 Email通知を拡張する
  • 9.4.2 IRCに通知する
  • 9.4.3 Twitterに通知する
  • コラム スマートフォンからJenkinsを見てみよう

第10章 一歩進んだ活用法

10.1 分散ソースコード管理システムとの連携

  • 10.1.1 集中管理型か? 分散管理型か?
  • コラム ソースコード管理システムはどのように運用すればいいか
  • 10.1.2 Mercurialと連携させる
  • 10.1.3 Gitと連携させる
  • コラム おすすめプラグイン「URL SCM plugin」

10.2 分散ビルドを実行する

  • 10.2.1 分散ビルドが必要になる理由
  • 10.2.2 マスターとスレーブとは
  • 10.2.3 マスターとスレーブの4つの設定方法
  • 10.2.4 スレーブサーバとしてWindowsを利用する
  • 10.2.5 スレーブサーバとしてLinuxを利用する
  • コラム おすすめプラグイン「Jenkins MSBuild Plugin」

10.3 成果物をデプロイする

  • 10.3.1 手動デプロイから自動デプロイへ
  • 10.3.2 War形式でデプロイする

10.4 結合テストを自動化する

  • 10.4.1 テスト自動化ツールの課題と意義
  • 10.4.2 Seleniumで自動的にテストを実行する
  • コラム Selenium IDEでテストコードを効率的に生成する
  • コラム システム管理ツールPuppet/Chefで自動化する範囲を拡大する
  • コラム Continuous Deliveryとは?

10.5 バグトラッカーと連携させる

  • 10.5.1 情報を共有すればバグ管理を強化できる
  • 10.5.2 Tracと連携させる
  • 10.5.3 Redmineと連携させる
  • 10.5.4 JIRAと連携させる

第11章 より便利に使うために

11.1 プラグインを利用する

  • 11.1.1 プラグインの探し方
  • 11.1.2 プラグインをインストールする
  • 11.1.3 プラグインをアップデートするには

11.2 プラグインを開発する

  • 11.2.1 開発に必要なもの
  • 11.2.2 開発環境を準備する
  • 11.2.3 雛型プラグインを作成する
  • 11.2.4 Eclipseで効率的に開発する
  • 11.2.5 プラグインをデバッグする

11.3 成果物を管理する

  • 11.3.1 成果物の保存設定を変更する
  • 11.3.2 ファイル指紋で成果物の情報を追跡する

11.4 ビューをカスタマイズする

  • 11.4.1 見たいジョブを埋もれさせないために
  • 11.4.2 ビューを追加する
  • 11.4.2 ビューを変更する
  • 11.4.3 ビューを削除する

第12章 安定して利用するための5つの運用管理

12.1 Jenkinsログを確認する

  • 12.1.1 問題解決の糸口はログにある
  • 12.1.2 ログを確認するには
  • 12.1.3 ログはどこに出力されるか

12.2 バックアップとリストア

  • 12.2.1 JENKINS_HOMEのコピーが基本
  • 12.2.2 BackupPluginでバックアップする

12.3 ディスク領域を管理/変更する

  • 12.3.1 ディスク容量を管理する
  • 12.3.2 JENKINS_HOMEを変更する

12.4 Jenkinsをチューニングする

  • 12.4.1 ヒープ領域の利用状況を確認する
  • 12.4.2 メモリ領域を拡張する

12.5 Jenkinsをバージョンアップさせる

  • 12.5.1 自動アップグレードのメリットとデメリット
  • 12.5.2 アップグレードの手順
  • 12.5.3 ダウングレードの手順

参考文献

著者プロフィール

川口耕介(かわぐちこうすけ)

Sun Microsystems, Inc.のシニアスタッフエンジニア。主としてXMLとのそのスキーマ言語関係の仕事をし,JAXB, JAXP, JAX-WSなどの仕様策定・実装に携わった。仕事の他にも,主にjava.netに多数の趣味のプロジェクトをホストしている。Hudsonは趣味のプロジェクトとして開始したが,今では本業の一部。米国カリフォルニア州在住。

URLhttp://www.kohsuke.org/


佐藤聖規(さとうまさのり)

株式会社NTTデータに勤務。入社以来,Webシステムのパフォーマンステスト・トラブルシュートの社内支援業務を担当。某製造業向け社内システムインフラ基盤のアーキテクトを務めた後,現在はNTTデータグループ全体の開発生産性・品質向上のため,Jenkins,Eclipse,Trac,Subversion,クラウドなどの開発・整備・サポート・普及活動に従事している。

最近はアジャイル開発プロセスのSCRUMがマイブームで,認定スクラムマスターである。

著書に『現場で使えるデバッグ&トラブルシュート Java編』(翔泳社 刊)がある。ほかにもDBマガジン(翔泳社 刊),@IT,日経ソフトウェア(日経BP 刊)などに記事を寄稿している。

Twitter:@lino_s

ブログ:http://d.hatena.ne.jp/lino/


和田貴久(わだたかひさ)

株式会社NTTデータに勤務。入社以来,現在に至るまで開発現場の生産性・品質の向上のため,開発環境の整備・普及・サポート業務を担当。

本業の傍ら興味のあるもの(Jenkinsプラグイン,Tracプラグイン,スマートフォンアプリ,Webアプリ,デジタルガジェットなど)の開発を行う日曜プログラマである。Jenkinsプラグインのコミッターであり,プラグイン開発の他に日本語化も行っている。

Twitter:@wadatka

ブログ:http://d.hatena.ne.jp/wadatka/


河村雅人(かわむらまさと)

大学,大学院ではヒューマンロボットインタラクションに関する研究に従事。現在は株式会社NTTデータに勤務。入社から現在に至るまで社内の開発環境の整備に従事する。

興味範囲はロボット,センシング,Physicalコンピューティング,組み込み,Python,Webアプリなど多岐に渡る。センシング技術を用いて人に社会にやさしいシステムを作りたい,愛と正義の若手エンジニア。

Twitter:@masato_ka


米沢弘樹(よねざわひろき)

大学,大学院時代は画像処理,分散処理に関する研究に従事する。現在は株式会社NTTデータに勤務。入社以来,NTTデータグループ全体の開発生産性・品質向上のため,社内開発環境の整備および普及に従事している。

最近は,フレームワークやAndroidアプリに興味があり勉強中。何かと作るのは大好きだが,テストをするのはあまり好きではない。


山岸啓(やまぎしけい)

大学,大学院では機械工学を専攻。現在は株式会社NTTデータに勤務。入社から現在に至るまで,開発現場の生産性・品質の向上のため,開発環境の整備に従事している。

最近は私物のAndroid端末をいじくり回す日々を送っている。

Facebook:Kei Yamagishi