Jenkinsを使った
初めての継続的インテグレーション
株式会社ビズリーチ
重松啓輔
自己紹介
・重松啓輔
・新卒2年目(2015年4月入社)
・半年の研修後、キャリアトレック事業部に配属 現在B側サーバサイドを担当
2
このイベントの目的
・Jenkinsを使ってみて、継続的インテグレーションの一旦を体験してみる
・インストールから簡単なジョブ実行、
プロジェクトのコンパイル・テスト・ビルドまでを経験してみる
3
目次
継続的インテグレーションとは?
Jenkinsを使ってみよう
install
job作成
gitからcheckout
Mavenを使ったコンパイル
Mavenを使ったテスト
Mavenを使ったパッケージング jar化
4
目次
継続的インテグレーションとは?
Jenkinsを使ってみよう
install
job作成
gitからcheckout
Mavenを使ったコンパイル
Mavenを使ったテスト
Mavenを使ったパッケージング jar化
5
継続的インテグレーションとは?
continuous integration(CI)とは、主にプログラマーのアプリケーション作成時の品
質改善や納期の短縮のための習慣である。
エクストリーム・プログラミングのプラクティスの一つで、
狭義にはビルドやテスト、インスペクションなどを継続的に実行していくことを
意味する。
引用 wikipedia
6
例
7
修正
モジュールA
利用
モジュールB
Xさん
Xさんの開発担当範囲
新しく利用
Yさん
例
8
コミット コミット
コミット
コミット
テスト
バグが絡み
合って修正
大変!
例
9
コミット コミット
テスト
バグを
早期発見
すぐ修正
テスト
バグを
早期発見
すぐ修正
短いサイクルで頻繁にこれらを実施することで、
問題点を早期に発見・修正でき、不具合の原因究明も容易になる
コンパイル
デプロイ
単体テスト
結合テスト
継続的インテグレーションとは?
10
→ 問題の発見・対応を先送りしない
→ リリース直前まで問題が溜め込まれるのを防ぐ
Jenkins
・Javaで書かれたオープンソースCIツール(開発者は川口耕介さん)
・簡単に導入・使用することができる
・450以上のプラグインにより機能を拡張できる仕組み
・どんなタイミングでもスクリプトを実行できる
余談:Jenkinsのイラストロゴは「執事」
開発者にとって面倒なビルドやテストといった作業を確実にやってくれる という意味らしい
11
さっそく使ってみよう!!
12
目次
継続的インテグレーションとは?
Jenkinsを使ってみよう
install
job作成
gitからcheckout
Mavenを使ったコンパイル
Mavenを使ったテスト
Mavenを使ったパッケージング jar化
13
初めてのJenkins
今回は
1. インストール
2. 簡単なジョブ実行
3. gitからcheckout
4. コンパイル
5. テスト
6. パッケージング
に相当する作業までを通してやってみます(時間との勝負...((((;≡д≡;i))))ヵ゙タヵ゙タ㌦㌦)。
14
やってみること
push
checkout
polling
15
compile
test
jar化
ローカル開発環境
初めてのJenkins
1. インストール
2. 簡単なジョブ実行
3. gitからcheckout
4. コンパイル
5. ビルド
6. パッケージング
16
まずはインストール
[ インストール ]
1. https://jenkins.io/ から直接DL
2. インストールした場所で$ java -jar jenkins.war -> http://localhost:8080
3. 赤字のパスにあるファイルの中身をコピペ
4. cat initialAdminPassword
5. pluginのインストール(何個か失敗する可能性もあります)
6. ユーザー登録
うまく立ち上がらない場合以下を確認してみてください。
Java実行環境が入っていること($ java -versionで確認)
17
18
19
20
21
22
初めてのJenkins
23
1. インストール
2. 簡単なジョブ実行
3. gitからcheckout
4. コンパイル
5. ビルド
6. パッケージング
単純なジョブの作成をしてみる
[ ジョブ作成 ]
・新規ジョブ作成 -> フリースタイル・プロジェクトのビルド
・[ビルド手順の追加] -> [シェルの実行] -> $ echo ‘Hello Jenkins!!’ -> 保存
・ビルド実行
ジョブとは? : Jenkinsに実行させたい一連の操作を記述したもの
24
25
ここのジョブを作成してみる
push
checkout
polling
26
compile
test
jar化
ローカル開発環境
GitHubから最新のファイルを取得するジョブの作成
[ 新規ジョブ作成 ]
・フリースタイル・プロジェクトのビルド -> ソースコード管理 -> Gitをcheck
・Repository URL : 個人のgitのurl(https://github.com/ci-sample-
shigematsu/jenkins)
・SCMをポーリング -> スケジュールの設定
$ */1 * * * * (分 時 日 月 曜日 今回は毎分ごとにpollingする)
27
ここのジョブを作成してみる
push
checkout
polling
28
compile
test
jar化
ローカル開発環境
取得したファイルをコンパイルするジョブの作成
[ 新規ジョブ作成 ]
・フリースタイル・プロジェクトのビルド -> カスタムワークスペースを使用 ->
ディレクトリに $ jobs/checkout/workspace と記述
・ビルド -> Mavenの呼び出し -> ゴール $ compile
(後でやる作業)
・ビルド後の処理 ->
ビルド後の処理の追加 ->
$ doTest(次に行うジョブの名前)
[安定している場合のみ起動] にチェック
29
[ 新規ジョブ作成 ]
・フリースタイル・プロジェクトのビルド -> カスタムワークスペースを使用 ->
ディレクトリに $ jobs/checkout/workspace と記述
・ビルド -> Mavenの呼び出し -> ゴール $ test
(後でやる作業)
・ビルド後の処理 ->
ビルド後の処理の追加 ->
$ packaging(次に行うジョブの名前)
[安定している場合のみ起動] にチェック
コンパイルしたファイルをテストするジョブを作成
30
jar化するジョブを作成
[ 新規ジョブ作成 ]
・フリースタイル・プロジェクトのビルド ->
ビルド -> Mavenの呼び出し -> ゴール $ package
31
今回作ったジョブの流れ
32
checkout
package
test
compile
success
FAILURE
success
FAILURE
success
FAILURE
実際のアプリケーションなら、
この後warファイルを
tomcat配下において再起動とか...?
GitHubでpushしてみる
・https://github.com/ci-sample-shigematsu/jenkins へアクセス. Forkする
・自分のgithubでforkしたリポジトリをみる
・何かファイルを追加してみる
・プルリクを送る
33
おまけ
[ Jenkinsおじさんを怒らせたい ]
・Jenkinsの管理 -> プラグインの管理 ->
emotional-jenkins-pulgin で検索&インストール
各プロジェクトの「ビルド後の処理」にEmotinal Jenkinsを入れると..
こんな風にオコなおじさんも見られる
34
ご静聴ありがとうございました
35
(参考)CIツールを導入する上での考慮
導入コスト
コミュニティの活動具合
バージョン管理システムやチケット管理システムとの連携など
36
(参考)Mavenを使ってjavaプロジェクトを作成
git管理直下に空ディレクトリを作成し、以下をコマンドラインで入力
mvn archetype:generate ¥
-DarchetypeArtifactId=maven-archetype-quickstart ¥
-DinteractiveMode=false ¥
-DgroupId=com.sample ¥
-DartifactId=hello
生成されるディレクトリとファイル構成
37
(参考)世の中のCIツール
CruitseControl
TravisCI
CricleCI
drone.io
CODESHIP
など
38

Jenkinsを使った初めての継続的インテグレーション

Editor's Notes

  • #34 http://qiita.com/Commander-Aipa/items/d61d21988a36a4d0e58b
  • #37 https://tbd.kaitoy.xyz/2016/02/09/continuous-integration-is-dead/ jenkins使ったケーススタディ https://event.atmarkit.co.jp/events/c37be4978bc4a5a23196d6da68753962/atmarkit_report
  • #39 http://qiita.com/hiro_koba/items/282e3b2e534f4bc22d64 https://event.atmarkit.co.jp/events/c37be4978bc4a5a23196d6da68753962/atmarkit_report