WEB+DB PRESS plus [改訂第3版]Jenkins実践入門 ―ビルド・テスト・デプロイを自動化する技術

「[改訂第3版]Jenkins実践入門」のカバー画像
著者
川口耕介かわぐちこうすけ佐藤聖規さとうまさのり 監修
佐藤聖規和田貴久わだたかひさ新井雄介あらいゆうすけ米沢弘樹よねざわひろき山岸啓やまぎしけい岩成祐樹いわなりゆうき 著
定価
3,278円(本体2,980円+税10%)
発売日
2017.5.24
判型
A5
頁数
416ページ
ISBN
978-4-7741-8928-4 978-4-7741-9026-6

概要

継続的インテグレーションに欠かせないツールであるJenkins。その導入から運用管理までを解説した定番書として大好評の『Jenkins実践入門』が、ついに2系に対応しました。生みの親である川口耕介氏監修のもと、近年の開発環境の変化に合わせて内容を一新。インストールなどの基本から、JUnitによるテストといった内容はもちろんのこと、さまざまなソースコード管理システムとの連携やおすすめプラグインの紹介、さらには認定試験についても説明します。チームの一員として上手に迎えるための実開発のポイントがわかります。

本書に関するお知らせ

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

こんな方にオススメ

  • CIを取り入れようとしているエンジニア

著者の一言

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

ソフトウェアを書く作業にはある種の才能、努力、時間が必要ですが、そのソフトウェアという「点」を普及させて実際に世の中の役に立つ「面」に広げるのも別種の才能、努力、時間が必要です。

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

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

Jenkinsが世に産声を上げてからはや10年以上、ソフトウェア開発の世界での自動化へのニーズは増える一方です。これにあわせて、継続的デリバリーやDevOpsへの取り組みを支えるためにJenkinsも、Jenkins 2、Pipeline、Blue Oceanといった様々な取り組みを進めています。また、CloudBeesも企業として成長し、企業での組織的な取り組みを助けるという「点を面に広げる」お手伝いをしています。

そういった環境の中で第3版を迎えたこの本が、実際にJenkinsを仕事に組み込む上で役に立つと確信しています。

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

目次

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

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

  • 1.1.1 手動ビルドとビルドツールの限界
  • 1.1.2 継続的インテグレーションと5つのメリット
  • Column 継続的インテグレーションは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の歴史
  • Column Jenkinsコミュニティに参加する3つの方法

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

2.1 Jenkinsをインストールする

  • 2.1.1 Windows Server 2016にインストールする
  • 2.1.2 CentOSにインストールする
  • 2.1.3 Dockerにインストールする
  • 2.1.4 Tomcatにインストールする
  • Column jenkins.warで簡単起動
  • Column Jenkins in the Cloud

2.2 Jenkinsの初期設定

  • 2.2.1 ビルド結果をメール通知する
  • 2.2.2 JDK/Ant/Maven/Gitを自動的にインストールする
  • Column Apacheの後ろでJenkinsを動かそう
  • 2.2.3 Jenkins1系から2系へのアップデート

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

3.1 ジョブを作る

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

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

  • 3.2.1 ビルドを実行する2つの方法
  • 3.2.2 手動でビルドする

3.3 結果を確認する

  • 3.3.1 ビルドの状態を確認する
  • 3.3.2 ビルド結果画面を確認する
  • 3.3.3 コンソール出力を確認する
  • 3.3.4 ジョブを削除する
  • Column Jenkinsの便利なショートカット

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

4.1 開発を始める前に

  • 4.1.1 モデルプロジェクト
  • 4.1.2 GitHubにプロジェクトデータを登録する
  • Column git-flow/GitHub Flow
  • 4.1.3 MavenとJDKを設定する
  • Column ビルドツール/JDKを手動でインストールするには
  • 4.1.4 Eclipseを準備する
  • 4.1.5 プラグインをインストールする
  • Column 社外のネットワークに接続するときの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.3 テスト結果を集計する

  • 5.3.1 集計機能を利用する
  • 5.3.2 失敗したテストの詳細を確認する
  • Column 単体テストフレームワーク

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

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

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

6.2 JaCoCoを実行する

  • 6.2.1 POMを設定する
  • 6.2.2 ジョブを設定する
  • 6.2.3 カバレッジレポートを確認する
  • 6.2.4 テストを追加する
  • 6.2.5 テスト追加後の結果を確認する
  • Column カバレッジ測定ツール

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

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

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

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

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

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

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

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

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

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

第9章 設定のポイント

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

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

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

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

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

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

9.4 パラメータを指定してビルドする

  • 9.4.1 パラメータビルドとは
  • 9.4.2 パラメータビルドの設定
  • 9.4.3 上流ジョブのパラメータを下流ジョブに引継ぐ

9.5 マルチ構成プロジェクトのビルド

  • 9.5.1 マルチ構成プロジェクトとは
  • 9.5.2 マルチ構成プロジェクトのビルド

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

  • 9.6.1 E-mail通知を拡張する
  • 9.6.2 IRCに通知する
  • 9.6.3 Slackに通知する
  • Column ChatOps/Hubot
  • Column スマートフォンからJenkinsを見てみよう

第10章 Pipelineの設定

10.1 Jenkins Pipelineとは

  • 10.1.1 Jenkinsを設定するときの問題点
  • 10.1.2 Jenkins Pipelineによるコードによる設定
  • 10.1.3 Jenkins Pipelineの構文

10.2 Pipelineを実行する

  • 10.2.1 Pipelineのインストールとジョブ作成
  • 10.2.2 Pipelineを実行する

10.3 Pipelineの高度な設定をする

  • 10.3.1 Snippet GeneratorによるPipelineスクリプトの自動生成
  • 10.3.2 Pipelineの中で定義済みのジョブを呼び出す
  • 10.3.3 Pipelineを利用した並列処理
  • 10.3.4 SCMからPipelineスクリプトを読み込む
  • 10.3.5 Multibranch Pipelineでビルドする
  • 10.3.6 Shared Libraryでコードを共有する
  • Column Blue Ocean

第11章 一歩進んだ活用法

11.1 さまざまなソースコード管理システムと連携する

  • 11.1.1 Subversionとの連携
  • 11.1.2 Team Foundation Version Controlとの連携
  • Column 集中管理型か、分散管理型か?
  • Column おすすめプラグイン「URL SCM plugin」

11.2 分散ビルドを実行する

  • 11.2.1 分散ビルドが必要になる理由
  • 11.2.2 マスターとビルドエージェントとは
  • 11.2.3 マスターとビルドエージェントの設定方法
  • 11.2.4 ビルドエージェントとしてWindowsを利用する
  • 11.2.5 ビルドエージェントとしてLinux/macOSを利用する
  • Column おすすめプラグイン「MSBuild Plugin」
  • 11.2.6 ビルドエージェントとしてDockerコンテナを利用する
  • Column コンテナとは? ~Docker
  • 11.2.7 ビルドの実行環境を制御する

11.3 Gradleでビルドする

  • 11.3.1 Gradleとは
  • 11.3.2 Gradleの設定
  • 11.3.3 JenkinsでのGradleを使ったビルド
  • Column おすすめプラグイン「TextFinder Plugin」

11.4 パッケージリポジトリと連携する

  • 11.4.1 パッケージリポジトリとは
  • 11.4.2 Mavenでのインハウスリポジトリの追加
  • 11.4.3 インハウスリポジトリへのMavenからのパッケージ登録
  • 11.4.4 Gradleでのインハウスリポジトリの追加
  • 11.4.5 インハウスリポジトリへのGradleからのパッケージ登録

11.5 成果物をデプロイする

  • 11.5.1 手動デプロイから自動デプロイへ
  • 11.5.2 WARファイルをデプロイする
  • Column Immutable Infrastructure ~デプロイをめぐるリリース管理

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

  • 11.6.1 テスト自動化ツールの課題と意義
  • 11.6.2 Seleniumで自動的にテストを実行する
  • Column Xvfb PluginによるXvfbでのSeleniumの実行

11.7 バグトラッカーと連携する

  • 11.7.1 情報を共有すればバグ管理を強化できる
  • 11.7.2 Redmineと連携させる
  • 11.7.3 JIRAと連携させる
  • 11.7.4 Backlogと連携させる
  • Column Infrastructure as CodeではじめるインフラCI

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

12.1 プラグインを利用する

  • 12.1.1 プラグインの探し方
  • 12.1.2 プラグインをインストールする
  • 12.1.3 プラグインをアップデートするには
  • Column CloudBees Jenkins Enterprise

12.2 プラグインを開発する

  • 12.2.1 開発に必要なもの
  • 12.2.2 開発環境を準備する
  • 12.2.3 雛型プラグインを作成する
  • 12.2.4 Eclipseで効率的に開発する
  • 12.2.5 プラグインをデバッグする

12.3 成果物を管理する

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

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

  • 12.4.1 見たいジョブを埋もれさせないために
  • 12.4.2 ビューを追加する
  • 12.4.3 ビューを変更する
  • 12.4.4 ビューを削除する
  • Column おすすめプラグイン「Nested View Plugin」と「CloudBees Folders Plugin」

12.5 Jenkinsをコマンドラインから操作する

  • 12.5.1 Jenkinsを外部マシンから操作する
  • 12.5.2 Jenkins CLI

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

13.1 Jenkinsログを確認する

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

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

  • 13.2.1 JENKINS_HOMEのコピーが基本
  • 13.2.2 ThinBackup Pluginでバックアップする

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

  • 13.3.1 ディスク容量を管理する
  • 13.3.2 JENKINS_HOMEを変更する
  • Column CloudBees Jenkins Operations Center

13.4 Jenkinsをチューニングする

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

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

  • 13.5.1 自動アップグレードのメリットとデメリット
  • 13.5.2 アップグレードの手順
  • 13.5.3 ダウングレードの手順
  • Column Continuous Deliveryとは?

13.6 Jenkinsのエキスパートになる ~Jenkins認定試験

プロフィール

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

Jenkinsプロジェクトリード。CloudBees, Inc.アーキテクト。Sun Microsystems社(現Oracle社)在籍時にJenkinsの前身であるHudsonを開発。その後InfraDNA社を設立、現在に至る。
Twitter:@kohsukekawa
ブログ:http://kohsuke.org/

佐藤聖規

とある会社でクラウドを使ったサービス開発や開発スタイル・働き方の変革を提案・営業するプリセールスエンジニア。前職はAmazon Web Services Japanでクラウドやアーキテクチャ、DevOpsに関するコンサルティングに従事。株式会社NTTデータ勤務時に、Jenkinsやバージョンコントロールシステム、チケット管理システムのプロジェクト導入コンサルティングやトレーニング、それらのクラウドの開発運用などに従事。 著書に『現場で使えるデバッグ&トラブルシュートJava編』(翔泳社)、ペンネーム織田翔名義で『15時間でわかるGit集中講座』(技術評論社)、『Java逆引きレシピ』(翔泳社)がある。記事寄稿やイベントでの講演を楽しみにしている。
3歳になる息子とサッカーをして遊ぶのが、最もリラックスできる瞬間。
Twitter:@lino_s
ブログ:http://lino.hatenablog.jp

和田貴久わだたかひさ

株式会社NTTデータに勤務。入社以来、現在に至るまで開発現場の生産性・品質向上のため、開発環境の整備・普及・サポート業務を担当。主に、Jenkinsを活用したCI環境のプロジェクト導入支援・コンサルティングや全社普及活動も行っている。また、Visual Studio OnlineやJiraなど、一通りの統合開発管理環境に精通し、社内外への情報発信も行っている。
土日にも子供の相手をしながらプライベート開発を行っている子育てエンジニア。
Twitter:@wadatka

新井雄介あらいゆうすけ

株式会社NTTデータに勤務。NTTデータグループ内のシステム開発に主にプロジェクトマネジメントとして従事した後、開発現場の生産性・品質向上を促進する部門へ異動。現在は、Jenkins等を利用したビルド・リリース自動化を中心として、開発効率化のための提案や導入支援、普及展開を担当。様々な開発現場を駆け回っている。

米沢弘樹よねざわひろき

大学、大学院では画像処理、分散処理に関する研究に従事する。株式会社NTTデータに入社後、NTTデータグループ全体の開発生産性・品質向上のため、Trac、Subversion、Jenkinsを中心とした社内開発環境の整備及び普及に従事した。現在は、継続的デリバリーの実現を目的とし、ビルド・リリースの最適化や環境整備、人財育成等を担当。プライベートでは、最近Revel(あと、愛猫2匹)と戯れていることが多い。
最近は管理プロセスに関する業務の方が多いが、「生涯、一エンジニア」をモットーに、エンジニアの明るい未来を目指して、日々邁進中!
Twitter:@yonezawahr

山岸啓やまぎしけい

株式会社NTTデータ入社以来、社内の開発・管理環境の整備・普及・サポートに従事。現在はTeam Foundation Serverをベースとした社内の国内外のプロジェクトの開発・管理環境の整備を行っている。また社内外でTeam Foundation Server/Visual Studio Onlineの情報発信なども行っている。
夏はダイバー、冬はスノーボーダー!
Twitter:@yamagishiki

岩成祐樹いわなりゆうき

大学、大学院では、通信情報システムを専攻。株式会社NTTデータに入社後、サービス提供フェーズにおける社内ツール(Trac、PostgreSQL etc.)の開発、R&Dに従事。現在は、Jenkins等のビルドリリース自動化を中心とした開発効率化の支援、R&D、社内サービス構築に取り組み、DevOpsを広めるべく奮闘中。プライベートでは、クラウドを使ったシステムやモバイルアプリなど、いそいそと何かを作ったり、ハッカソンやテックカンファレンスに参加するのが好き。
Pythonと地元を愛する、とっとり出身エンジニア。
Twitter:@yuki_iwnr