CIの勉強始めにMacにJenkinsを導入


## はじめに
個人でもある程度自動デプロイできるようになりたいなーってことで継続的インテグレーション(CI: Continuous Integration) の勉強始めました。

ある勉強会でテスト系専門で従事されている方に
商用アプリはがっつりやるとして，
個人だとどこまですればいいでしょうか？って聞いて
いろいろ教えていただいたので，
試行錯誤しながら環境作っていこうと思います。

今回はとりあえず，CI ツールとしては定番の Jenkins を Mac に導入してみたのでそのことについて書きます。

> 今回は基本的にまっさらな環境(ほぼ購入後，Xcodeのみがっつり使用)から導入を試しているので全然挙動が異なる場合があります。また，開発環境を壊してしまう可能性もあるので自己責任でお願いいたします。

## Jenkins とは

* CI ツールでオープンソース
* Java で動作するので Win，Linux，Mac でも使える
* Git などの管理ツールと連携可能
* プラグインも多い
* 利用者も多い(らしい)

個人ユースでも MacBook をサーバとして使えるというのがいい。
個人でサーバ借りるのも面倒だし・・・試す程度なら全然。

## 執筆時の環境，バージョン情報

* MacBook Early 2016
* OS X 10.11 (El Capitan)
* Xcode 7.3.1
* Homebrew 0.9.9
* java version 1.8.0_102
* Jenkins version 2.18

## Homebrew を導入
まずはパッケージツールである Homebrew をインストールします。
MacPorts とどっちがいいかはわからないですが，
まっさらな MacBook でやれたのでこっちにします。
**個人的には MacPorts 派** です。
ただ最近は brew の記事の方が増えてきた印象・・・

OS X 用のパッケージマネージャー[^1]にコマンドが書いてある。
ターミナル.app を開いてコマンド入力。

```bash:Homebrewを導入
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

```bash:出力結果例
Milanista-MacBook:~ Milanista$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
==> The following directories will be made group writable:
/usr/local/.
/usr/local/bin
==> The following directories will have their owner set to Milanista:
/usr/local/.
/usr/local/bin
==> The following directories will have their group set to admin:
/usr/local/.
/usr/local/bin

Press RETURN to continue or any other key to abort
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/. /usr/local/bin
Password:
==> /usr/bin/sudo /usr/sbin/chown Milanista /usr/local/. /usr/local/bin
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local/. /usr/local/bin
==> /usr/bin/sudo /bin/mkdir -p /Users/Milanista/Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Users/Milanista/Library/Caches/Homebrew
==> /usr/bin/sudo /usr/sbin/chown Milanista /Users/Milanista/Library/Caches/Homebrew
==> Downloading and installing Homebrew...
remote: Counting objects: 1030, done.
remote: Compressing objects: 100% (918/918), done.
remote: Total 1030 (delta 93), reused 697 (delta 70), pack-reused 0
Receiving objects: 100% (1030/1030), 1.03 MiB | 135.00 KiB/s, done.
Resolving deltas: 100% (93/93), done.
From https://github.com/Homebrew/brew
 * [new branch]      master     -> origin/master
HEAD is now at 7c7e2d0 Merge pull request #768 from MikeMcQuaid/cask-man
==> Tapping homebrew/core
Cloning into '/usr/local/Library/Taps/homebrew/homebrew-core'...
remote: Counting objects: 3716, done.
remote: Compressing objects: 100% (3603/3603), done.
remote: Total 3716 (delta 15), reused 1794 (delta 4), pack-reused 0
Receiving objects: 100% (3716/3716), 2.87 MiB | 433.00 KiB/s, done.
Resolving deltas: 100% (15/15), done.
Checking connectivity... done.
Tapped 3594 formulae (3,743 files, 8.9M)
==> Installation successful!
==> Next steps
Run `brew help` to get started
Further documentation: https://git.io/brew-docs
==> Homebrew has enabled anonymous aggregate user behaviour analytics
Read the analytics documentation (and how to opt-out) here:
  https://git.io/brew-analytics
```

Homebrew のバージョンを確認してインストール出来ているか確認します。

```bash:Homebrewのバージョン確認
$ brew -v
```

```bash:出力例
Homebrew 0.9.9 (git revision 7c7e; last commit 2016-08-20)
Homebrew/homebrew-core (git revision 12f6; last commit 2016-08-20)
```

## Jenkins をインストール

Homebrew がインストールされていることを確認したら，
下記コマンドを叩いて Jenkins をインストールします。

```bash:Jenkinsをインストール
$ brew install jenkins
```

```bash:インストール失敗例
Milanista-MacBook:~ Milanista$ brew install jenkins
jenkins: Java 1.7+ is required to install this formula.JavaRequirement unsatisfied!

You can install with Homebrew Cask:
  brew cask install java

You can download from:
  http://www.oracle.com/technetwork/java/javase/downloads/index.html
Error: An unsatisfied requirement failed this build.
```

Java 1.7 以上が必要らしい。

```bash:javaのバージョン確認
$ java -version
```

```bash:失敗例
Milanista-MacBook:~ Milanista$ java -version
No Java runtime present, requesting install.
```

こういう画像が出る。
![javaSDK.png](https://qiita-image-store.s3.amazonaws.com/0/88266/94c1326c-960d-7f24-1e3a-c5894e7fbe48.png "javaSDK.png")

サイトに飛んで色々導入したけどダメだったので，
とりあえずさっきのエラーの内容を確認して下記コマンドを打つ。

```bash:javaの導入
$ brew cask install java
```

```bash:javaのインストール時の出力例
Milanista-MacBook:~ Milanista$ brew cask install java
==> Tapping caskroom/cask
Cloning into '/usr/local/Library/Taps/caskroom/homebrew-cask'...
remote: Counting objects: 3380, done.
remote: Compressing objects: 100% (3362/3362), done.
remote: Total 3380 (delta 37), reused 438 (delta 12), pack-reused 0
Receiving objects: 100% (3380/3380), 1.14 MiB | 117.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
Checking connectivity... done.
Tapped 0 formulae (3,387 files, 3.5M)
==> Creating Caskroom at /usr/local/Caskroom
==> Caveats
This Cask makes minor modifications to the JRE to prevent issues with
packaged applications, as discussed here:

  https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361

If your Java application still asks for JRE installation, you might need
to reboot or logout/login.

Installing this Cask means you have AGREED to the Oracle Binary Code
License Agreement for Java SE at

  http://www.oracle.com/technetwork/java/javase/terms/license/index.html

==> Downloading http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-macosx-x64.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask java
==> Running installer for java; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is JDK 8 Update 102
==> installer: Upgrading at base path /
==> installer: The upgrade was successful.
🍺  java was successfully installed!
```

インストール完了後，再度 java のバージョンチェック。

```bash:javaのバージョンチェック出力例
Milanista-MacBook:~ Milanista$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)mode)
```

java のバージョンが 1.7 以上になったので，再度 jenkins をインストール。

```bash:jenkinsのインストール時の出力例
Milanista-MacBook:~ Milanista$ brew install jenkins
==> Using the sandbox
==> Downloading http://mirrors.jenkins-ci.org/war/2.18/jenkins.war
==> Downloading from http://ftp.tsukuba.wide.ad.jp/software/jenkins/war/2.18/jenkins.war
######################################################################## 100.0%
==> jar xvf jenkins.war
==> Caveats
Note: When using launchctl the port will be 8080.

To have launchd start jenkins now and restart at login:
  brew services start jenkins
Or, if you don't want/need a background service you can just run:
  jenkins
==> Summary
🍺  /usr/local/Cellar/jenkins/2.18: 6 files, 67.4M, built in 1 minute 44 seconds

```

## Jenkins のインストール確認
下記コマンドを打って Jenkins を立ち上げる。

```bash:jenkinsを立ち上げる
$ java -jar /usr/local/opt/jenkins/libexec/jenkins.war

または

$ jenkins
```

なんか色々出力始まればとりあえずOK。
次にブラウザを開いて ```http://localhost:8080/``` にアクセス。

パスワードを要求されてる。
エディタ(例えば emacs)で下記ファイルにアクセスして文字列をコピーする。

```bash:Jenkinsのパスワードを見る
$ emacs ~/.jenkins/secrets/initialAdminPassword
```

再度 jenkins を実行してログイン画面を出して，先ほどのパスワードを入力。

![jenkinslogin.png](https://qiita-image-store.s3.amazonaws.com/0/88266/f648c07a-5da9-0812-a33d-41668c829bb1.png "jenkinslogin.png")

うまくいくと，Jenkins のカスタマイズ画面に。どっちでもいい気がする。
![jenkins_customize.png](https://qiita-image-store.s3.amazonaws.com/0/88266/029871a5-9d01-6280-272d-e2ea17b376dd.png "jenkins_customize.png")

選ぶと設定が始まる。
![jenkins_settings_start.png](https://qiita-image-store.s3.amazonaws.com/0/88266/5a348c02-c23b-64af-7cfd-8c64ee8c8b6d.png "jenkins_settings_start.png")

設定が終わると管理者の情報入力があるので適当に。
![jenkins_admin.png](https://qiita-image-store.s3.amazonaws.com/0/88266/c90cddeb-db2b-813a-47c2-8bd7ce772148.png "jenkins_admin.png")

完了。ボタンを押すと・・・
![jenkins_get_started.png](https://qiita-image-store.s3.amazonaws.com/0/88266/d74a15b7-7d97-f96f-f9b5-d4bd50d99525.png "jenkins_get_started.png")

管理画面に遷移します。Jenkinsおじさんもいるー。
![jenkins_admin_screen.png](https://qiita-image-store.s3.amazonaws.com/0/88266/f2531ce4-c8a0-448a-f937-bd9b6d3735b8.png "jenkins_admin_screen.png")

まだまだこれからだけど今回はここまでにする。

## おわりに
CI の勉強始めに Jenkins を MacBook に導入してみた。
まだジョブの追加とかいろいろあるので勉強してみる。
Homebrew とか java が最新の方はサクッといけると思う。
とりあえず，Jenkins おじさんに会えてよかった。
でも，わ，私は Jenkins おじさんにはならないんだからね。

ここまでご覧いただきありがとうございました。
CI を勉強するにあたって注意する点，ここが難しいとかあったら
ご教示いただければ幸いです。

### 参考
[^1]: [Homebrew OS X 用パッケージマネージャー](http://brew.sh/index_ja.html)