jenkinsを使った初めての継続的インテグレーション
TRANSCRIPT
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
compiletestjar 化
ローカル開発環境
初めての 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 で確認 )
コマンドを実行した場所に jenkins.war が保存されていること
Jenkins はデフォルトで 8080 のポートを使用します。他のソフトやサービスで 8080 ポートを使用していないか確認して下さい。 Jenkins のポートは、実行時のポート指定( java -jar jenkins.war –httpPort=《任意のポート》)で変更することができます。
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
compiletestjar 化
ローカル開発環境
GitHub から最新のファイルを取得するジョブの作成[ 新規ジョブ作成 ]
・フリースタイル・プロジェクトのビルド -> ソースコード管理 -> Git をcheck
・ Repository URL : 個人の git の url(https://github.com/ci-sample-shigematsu/jenkins)
・ SCM をポーリング -> スケジュールの設定$ */1 * * * * ( 分時日月曜日今回は毎分ごとに polling する )
27
ここのジョブを作成してみる
push
checkout
polling
28
compiletestjar 化
ローカル開発環境
取得したファイルをコンパイルするジョブの作成
[ 新規ジョブ作成 ]
・フリースタイル・プロジェクトのビルド -> カスタムワークスペースを使用-> ディレクトリに $ jobs/checkout/workspace と記述
・ビルド -> Maven の呼び出し -> ゴール $ compile
( 後でやる作業 ) ・ビルド後の処理 ->
ビルド後の処理の追加 -> $ doTest( 次に行うジョブの名前 ) [安定している場合のみ起動 ] にチェック
29
[ 新規ジョブ作成 ]
・フリースタイル・プロジェクトのビルド -> カスタムワークスペースを使用->
ディレクトリに $ jobs/checkout/workspace と記述
・ビルド -> Maven の呼び出し -> ゴール $ test
( 後でやる作業 ) ・ビルド後の処理 ->
ビルド後の処理の追加 -> $ packaging( 次に行うジョブの名前 ) [安定している場合のみ起動 ] にチェック
コンパイルしたファイルをテストするジョブを作成
30
jar 化するジョブを作成
[ 新規ジョブ作成 ]
・フリースタイル・プロジェクトのビルド -> ビルド -> Maven の呼び出し -> ゴール $ package
31
今回作ったジョブの流れ
32
checkout
package
test
compilesuccess
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