はじめてのJenkins


Jenkinsを試しに触ってどんなものか理解してもらうことを目的としています。
JOBを一度も作ったことがない人向けのハンズオン資料です。

## 環境

Mac
JDK8(たぶん6以上だった動くと思われる）
Jenkins1.619


## 準備

[Jenkinsのサイト](https://jenkins-ci.org/)のJava Web Archiveからwarをダウンロードし、以下を実行。
ポートを変えたい場合はhttpPortで指定してください。

```
java -jar jenkins.war –-httpPort=8080
```

### エラーが出た場合

ソケット周りでエラーが出た場合は

```
2015 9:18:08 午後 hudson.UDPBroadcastThread run
警告: UDP handling problem
java.net.SocketException: Can't assign requested address
	at java.net.PlainDatagramSocketImpl.join(Native Method)
	at java.net.AbstractPlainDatagramSocketImpl.join(AbstractPlainDatagramSocketImpl.java:178)
	at java.net.MulticastSocket.joinGroup(MulticastSocket.java:323)
	at hudson.UDPBroadcastThread.run(UDPBroadcastThread.java:77)
```

こうすることで解決しました。
IPv6アドレスあたりが邪魔をしているらしいです（よくわかってない

```
java -Djava.net.preferIPv4Stack=true -jar jenkins.war --httpPort=8080
```

参考
> http://pcworkmemo.blogspot.jp/2013/10/freebsdjenkins.html


```http://localhost:8080/``` にアクセスしてこんな感じの画面がでれば成功。

![jenkins_home.png](https://qiita-image-store.s3.amazonaws.com/0/47589/b3f2df83-be20-ae1d-9e6a-6d0ffe3b137b.png "jenkins_home.png")




## Jobの作成

JobとはJenkins上で実行される処理のひとかたまりのことです。Jobの中にいろんな処理をつめこむこともできますし、複数のJobをつなげて実行することも可能です。

まずはHello,JenkinsというJobを作ってみましょう。

1. 新規Job作成
2. 「hello_jenkins」というジョブ名で、「フリースタイルプロジェクトのビルド」を選択。
3. 「ビルド手順の追加」から「シェルの実行」を選択
4. シェルスクリプトの入力欄に ```echo "Hello,Jenkins"```と入力して保存

![jenkins_hellojob.png](https://qiita-image-store.s3.amazonaws.com/0/47589/1c8d4301-73d4-97d1-acbc-d85822da5d24.png "jenkins_hellojob.png")


これだけです。

## Jobの手動実行

1. Jenkinsのホーム画面から先ほど作った「hello_jenkins」Jobを選択
2. 左側にある「ビルド実行」ボタンを押す
3. 「ビルドがスケジュールされました」と表示され、ビルド履歴が追加される

Jobを実行することをビルドと言い、何回もビルド実行するとビルド履歴が残ります。
実行結果はビルド履歴のコンソールから確認できます

![jenkins_jobresult.png](https://qiita-image-store.s3.amazonaws.com/0/47589/e2fc15ee-7151-0a0f-e1c0-10a572aaa5eb.png "jenkins_jobresult.png")

このように、Hello,Jenkinsと出力されます。

```
[workspace] $ /bin/sh -xe /var/folders/lb/yn_3vms5485_j4t34b8xx00r0000gn/T/hudson2910569267105369273.sh
+ echo Hello,Jenkins
Hello,Jenkins
Finished: SUCCESS
```

ちなみにシェルを異常終了させると、Jobも失敗します。

ビルド履歴の左の丸いアイコンも青から赤になったり、Jobが「曇り」マークになったり、いろいろ変わっているので何が変わったか探してみるのも面白いと思います。

失敗した時のコンソールはこのようになります。

```
[workspace] $ /bin/sh -xe /var/folders/lb/yn_3vms5485_j4t34b8xx00r0000gn/T/hudson4268607205151617609.sh
+ echo Hello,Jenkins
Hello,Jenkins
+ exit 1
Build step 'シェルの実行' marked build as failure
Finished: FAILURE
```

Jenkinsおじさんに怒られてみたい人はこんなのもあります。
[Jenkins | Emotional Jenkins Pluginで執事を怒らす](http://tbpgr.hatenablog.com/entry/20131102/1383410798)


## Jobの自動実行

1. Jenkinsのホーム画面から先ほど作った「hello_jenkins」Jobを選択
2. 左側にある「設定」ボタンを押す
3. ビルドトリガの「定期的に実行」にチェックを入れる
4. スケジュール欄に実行したい間隔を入れる。

下記の例は毎日9時台のどこか(システム的に都合がいいタイミング)で実行する例です。

![jenkins_build_trigger.png](https://qiita-image-store.s3.amazonaws.com/0/47589/28e45ed5-4008-b807-8a95-0dca3d03f4ac.png "jenkins_build_trigger.png")


## GitHubと連携したJobを作る

まずGitプラグインを追加します。事前にMacにgitが入れておいてください。

1. Jenkinsのホーム画面から左の「Jenkinsの管理」を選択
2. 「プラグインの管理」を選択
3. 「利用可能」タブに変えて、フィルター欄に「git plugin」と入力
4. GitPluginにチェックを入れて「再起動せずにインストール」（再起動してもいいです）

同様にGradlePluginもインストールしておいてください。

![jenkins_plugin.png](https://qiita-image-store.s3.amazonaws.com/0/47589/576a60cc-ee31-a17e-8bed-55c2870f997e.png "jenkins_plugin.png")


これでGitが使えるようになりましたのでJobを作りましょう

1. Job名は「github_sample」にしました（なんでもいいです）
2. ソースコード管理の欄に「git」が追加されてるので、それを選択
3. Repositoryはなんでもいいですが、サンプルを使うなら以下を入力
https://github.com/nyasba/JenkinsHandsonSample.git
4. 「ビルド手順を追加」で「Invoke Gradle script」を選択  
ここになければGradlePluginのリリースをしてください。
5. 「Use Gradle Wrapper」を選択
6. 「Make gradlew executable」をチェック
7. Tasksに「clean test」を入力
　　
gitの設定詳細

![jenkins_git.png](https://qiita-image-store.s3.amazonaws.com/0/47589/63bac74e-268f-ba51-e55f-694ec7c44bfa.png "jenkins_git.png")

gradleビルドの設定詳細

![jenkins_gradle.png](https://qiita-image-store.s3.amazonaws.com/0/47589/3d2c4fb9-3b8b-259d-6609-895a73bac52f.png "jenkins_gradle.png")

gradleスクリプトは単にスリープ入れるだけになってるので10秒程度待てば処理は終わります。

## Jobの実行が成功したら後処理を行う

1. 「Post build task」Pluginを追加する
2. JOBの「設定」で「ビルド後の処理の追加」から「Post Build Task」を選択
3. 「BUILD SUCCESSFUL」だったらスクリプトを実行するように記述

![jenkins_post_build.png](https://qiita-image-store.s3.amazonaws.com/0/47589/421d89d1-4112-59cb-15a4-cf2b8a623188.png "jenkins_post_build.png")

これをうまく使うと、ビルドが成功／失敗したらchatに通知などが実現できるようになります。

## Jobをつなげてみる（後続Jobを設定）

今回は「github_sample」Job完了後に「hello_jenkins」Jobを実行するようにします。

1. 「github_sample」Jobの設定を開く
2. 「ビルド後の処理の追加」から「他のプロジェクトのビルド」を選択
3. 対象プロジェクトに「hello_jenkins」を選択

![jenkins_post_exec.png](https://qiita-image-store.s3.amazonaws.com/0/47589/7cdb04d6-93f7-0db6-a9be-d1a3738e97e7.png "jenkins_post_exec.png")


これで「github_sample」Jobが終わると、連動して「hello_jenkins」Jobが動き始めるようになったかと思います。


## BuildPipelineを作ってみる

最後に、つなげたJOBをBuildPipelineを使って、今何が動いているのか見えるようにしましょう。

1. Jenkinsの管理から「Build Pipeline Plugin」を追加します。
2. Jenkinsのホーム画面で「＋」のタブをクリックします
3. ビュー名を「sample_pipeline」とし、Build Pipeline Viewを選択してOK
4. Select Initial Jobで「github_sample」Jobを選択し、  
No Of Displayed Buildsを「10」にして保存

BuildPipelineをつくるための「＋」タブ
![jenkins_view.png](https://qiita-image-store.s3.amazonaws.com/0/47589/87530975-cc25-bd92-82ac-591ae74f6fb4.png "jenkins_view.png")

BuildPipelineの設定内容
![jenkins_pipeline.png](https://qiita-image-store.s3.amazonaws.com/0/47589/3eb86e15-5703-2588-5108-620afe1f2b64.png "jenkins_pipeline.png")


できあがりはこんな感じです。動いているのがわかりやすいですね。

![jenkins_pipeline_view.png](https://qiita-image-store.s3.amazonaws.com/0/47589/883dee98-6960-8ae1-6691-47f6eca259e3.png "jenkins_pipeline_view.png")


## まとめ

JenkinsでJobを作って、つなげて、きれいに見せる方法を紹介しました。
Pluginをいくつか使いましたが、他にもいろんなPluginがあって活用方法はいろいろあると思いますので、これをきっかけに興味を持って触ってみてもらえたらとおもいます。