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

38
Jenkins をををを をををををををををををををををを ををををををををを をををを

Upload: dcubeio

Post on 07-Jan-2017

209 views

Category:

Technology


2 download

TRANSCRIPT

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

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

株式会社ビズリーチ重松啓輔

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

自己紹介

・重松啓輔

・新卒2年目 (2015 年 4 月入社 )

・半年の研修後、キャリアトレック事業部に配属 現在 B 側サーバサイドを担当

2

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

このイベントの目的

・ Jenkins を使ってみて、継続的インテグレーションの一旦を体験してみる

・インストールから簡単なジョブ実行、プロジェクトのコンパイル・テスト・ビルドまでを経験してみる

3

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

目次

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

Jenkins を使ってみようinstall

job 作成

git から checkout

Maven を使ったコンパイル

Maven を使ったテスト

Maven を使ったパッケージング jar 化

4

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

目次

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

Jenkins を使ってみようinstall

job 作成

git から checkout

Maven を使ったコンパイル

Maven を使ったテスト

Maven を使ったパッケージング jar 化

5

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

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

continuous integration(CI) とは、主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣である。エクストリーム・プログラミングのプラクティスの一つで、狭義にはビルドやテスト、インスペクションなどを継続的に実行していくことを意味する。

引用 wikipedia

6

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

7

修正

モジュールA

利用

モジュールB

X さん

X さんの開発担当範囲

新しく利用

Y さん

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

8

コミット コミット

コミット

コミット

テストバグが絡み合って修正大変!

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

9

コミット コミット

テスト

バグを早期発見すぐ修正

テスト

バグを早期発見すぐ修正

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

短いサイクルで頻繁にこれらを実施することで、

問題点を早期に発見・修正でき、不具合の原因究明も容易になる

コンパイル

デプロイ

単体テスト

結合テスト

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

10

→ 問題の発見・対応を先送りしない→ リリース直前まで問題が溜め込まれるのを防ぐ

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

Jenkins

・ Java で書かれたオープンソース CI ツール ( 開発者は川口耕介さん )

・簡単に導入・使用することができる

・ 450 以上のプラグインにより機能を拡張できる仕組み

・どんなタイミングでもスクリプトを実行できる

余談: Jenkins のイラストロゴは「執事」 開発者にとって面倒なビルドやテストといった作業を確実にやってくれる という意味らしい

11

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

さっそく使ってみよう!!

12

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

目次

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

Jenkins を使ってみようinstall

job 作成

git から checkout

Maven を使ったコンパイル

Maven を使ったテスト

Maven を使ったパッケージング jar 化

13

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

初めての Jenkins

今回は

1. インストール

2. 簡単なジョブ実行

3. git から checkout

4. コンパイル

5. テスト

6. パッケージング

に相当する作業までを通してやってみます ( 時間との勝負 ...((((;≡д≡;i))))ヵ゙タヵ゙タ㌦㌦ ) 。14

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

やってみること

push

checkout

polling

15

compiletestjar 化

ローカル開発環境

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

初めての Jenkins

1. インストール

2. 簡単なジョブ実行

3. git から checkout

4. コンパイル

5. ビルド

6. パッケージング16

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

まずはインストール

[ インストール ]

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

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

18

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

19

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

20

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

21

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

22

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

初めての Jenkins

23

1. インストール

2. 簡単なジョブ実行

3. git から checkout

4. コンパイル

5. ビルド

6. パッケージング

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

単純なジョブの作成をしてみる

[ ジョブ作成 ]

・新規ジョブ作成 -> フリースタイル・プロジェクトのビルド

・ [ ビルド手順の追加 ] -> [ シェルの実行 ] -> $ echo ‘Hello Jenkins!!’ -> 保存

・ビルド実行

ジョブとは? : Jenkins に実行させたい一連の操作を記述したもの

24

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

25

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

ここのジョブを作成してみる

push

checkout

polling

26

compiletestjar 化

ローカル開発環境

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

GitHub から最新のファイルを取得するジョブの作成[ 新規ジョブ作成 ]

・フリースタイル・プロジェクトのビルド -> ソースコード管理 -> Git をcheck

・ Repository URL : 個人の git の url(https://github.com/ci-sample-shigematsu/jenkins)

・ SCM をポーリング -> スケジュールの設定$ */1 * * * * ( 分時日月曜日今回は毎分ごとに polling する )

27

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

ここのジョブを作成してみる

push

checkout

polling

28

compiletestjar 化

ローカル開発環境

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

取得したファイルをコンパイルするジョブの作成

[ 新規ジョブ作成 ]

・フリースタイル・プロジェクトのビルド -> カスタムワークスペースを使用-> ディレクトリに $ jobs/checkout/workspace と記述

・ビルド -> Maven の呼び出し -> ゴール $ compile

( 後でやる作業 ) ・ビルド後の処理 ->

ビルド後の処理の追加 -> $ doTest( 次に行うジョブの名前 ) [安定している場合のみ起動 ] にチェック

29

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

[ 新規ジョブ作成 ]

・フリースタイル・プロジェクトのビルド -> カスタムワークスペースを使用->

ディレクトリに $ jobs/checkout/workspace と記述

・ビルド -> Maven の呼び出し -> ゴール $ test

( 後でやる作業 ) ・ビルド後の処理 ->

ビルド後の処理の追加 -> $ packaging( 次に行うジョブの名前 ) [安定している場合のみ起動 ] にチェック

コンパイルしたファイルをテストするジョブを作成

30

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

jar 化するジョブを作成

[ 新規ジョブ作成 ]

・フリースタイル・プロジェクトのビルド -> ビルド -> Maven の呼び出し -> ゴール $ package

31

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

今回作ったジョブの流れ

32

checkout

package

test

compilesuccess

FAILURE

success

FAILURE

success

FAILURE

実際のアプリケーションなら、この後 war ファイルをtomcat 配下において再起動とか ...?

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

GitHub で push してみる

・ https://github.com/ci-sample-shigematsu/jenkins へアクセス. Fork する

・自分の github で fork したリポジトリをみる

・何かファイルを追加してみる

・プルリクを送る

33

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

おまけ

[ Jenkins おじさんを怒らせたい ]

・ Jenkins の管理 -> プラグインの管理 -> emotional-jenkins-pulgin で検索 & インストール各プロジェクトの「ビルド後の処理」に Emotinal Jenkins を入れると..

こんな風にオコなおじさんも見られる

34

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

ご静聴ありがとうございました

35

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

(参考 )CI ツールを導入する上での考慮

導入コスト

コミュニティの活動具合

バージョン管理システムやチケット管理システムとの連携など

36

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

(参考 )Maven を使って java プロジェクトを作成

git管理直下に空ディレクトリを作成し、以下をコマンドラインで入力

mvn archetype:generate \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false \ -DgroupId=com.sample \ -DartifactId=hello

生成されるディレクトリとファイル構成

37

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

(参考 )世の中の CI ツール

CruitseControl

TravisCI

CricleCI

drone.io

CODESHIP

など

38