Jenkins を Mac にインストールして LAN内の PC から接続するまで

##この記事でわかること
- **Mac** に **Jenkins** をインストールして起動するまでの流れ
 - パッケージからではなく、**Homebrew** を使う方法
- LAN内の **他のPCから Jenkins にアクセス**するための設定
- **無償で使える Java (JDK)** のインストール方法や変更方法

##やりたいことのイメージ
- **Jenkins** による自動処理を **MacBook や Mac mini** 等で行いたい
- Mac をサーバとして、**ローカルエリアネットワーク (LAN)** 内で利用

##Jenkins って何？
**CI（継続的インテグレーション）**を支援するオープンソース・ソフトウエア（OSS）の１つで、デファクトスタンダード。

**CI** とは、`開発`⇒`ビルド`⇒`サーバ配備`⇒`テスト`⇒`リリース`、のような、開発〜リリースに至る一連の流れを自動的・高頻度に行い、**手作業によるミスを回避し、問題（bug）を早期に発見することで、品質の向上と開発効率の向上**を目指す手法のこと。

※ 上記のような **CIとして**ではなく、**一連の処理を自動的に行う機能**として使われるケースも多い


##ざっくり、入れるものは以下
- Homebrew
- Java (JDK)
- Jenkins

##検証環境
- MacBook Pro (13-inch, Mid 2010)
- macOS (Sierra) 10.12.6

##インストールの流れ

### Homebrew をインストール
インストール済みであればスキップ。
その場合は `brew update` でアップデートしておくと良い。

```bash:terminal
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
- 参考：[Homebrew 公式サイト](https://brew.sh/index_ja.html)
- 必要に応じて **Command Line Tools (CLT) for Xcode** もインストール
    - Homebrew インストールの流れで同時にインストールされるはず
    - インストールされなければ、`xcode-select --install` でインストール
- インストール後、コマンドラインで `brew doctor` と打って、`Your system is ready to brew.` と表示されればOK

###Java (JDK) をインストール
インストール済みであればスキップ。
コマンドラインで `java -version` と打って、バージョン等が表示されればインストール済み。

```bash:terminal
$ java -version
```

未インストールの場合、以下のダイアログが表示されるが、**OK をクリックして終了**する。（ここで紹介される Oracle の Java はインストールしない）
<img width="369" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475505/d9d624bd-9a26-71f9-0b9b-e82cda49bf08.png">

####（インストール済みの場合の確認事項）
商用利用で Java (JDK) を無償利用したい場合、Mac に標準的にインストールされる **Oracle JDK** はサポート終了 or 有償サポートになっているので、Oracle JDK ではない事を確認しておく。
その場合を含め、JDK の確認やバージョンを変更したい場合は以下を参照。
⇒ [JDK の確認・バージョン等を変更する場合](#補足jdk-の確認バージョン等を変更する場合)（※ページ内リンク）

####Java (AdoptOpenJDK) をインストール
Java (JDK) は、**JavaAdoptOpenJDK 8** が 2023年9月までのサポートが確定しているのでオススメ。

参考：[無償でJavaを商用使用する場合に検討すべき3つのJDK - Qiita](https://qiita.com/kojiita/items/72e0b88fabb210f6e68f)

```bash:terminal
$ brew tap adoptopenjdk/openjdk
$ brew cask install adoptopenjdk8
```
途中、パスワードが求められた場合は **Mac のパスワード**を入力。
上記コマンドでインストール後、`.bash_profile` に環境変数 `JAVA_HOME` を設定し、パスを通す。

```bash:terminal
$ echo 'export JAVA_HOME=`/usr/libexec/java_home -v 1.8`' >> ~/.bash_profile
$ echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
```
コマンドラインで `java -version` と打って、**AdoptOpenJDK のバージョン**が表示されればOK。

```bash:terminal
$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.222-b10, mixed mode)
```

###Jenkins をインストール

```bash:terminal
$ brew install jenkins
　　：
==> Summary
🍺  /usr/local/Cellar/jenkins/2.189: 7 files, 78MB, built in 1 minute 46 seconds
```
成功すると上記のような表示になる。
コマンドラインで `jenkins --help` と打ち込んで、Jenkins のヘルプが表示されるのを確認しても良い。

##Jenkins の初期設定

初期設定をするため、Jenkins を起動する。

```bash:terminal
$ jenkins
```

すると起動に関わるログが流れるが、途中で以下のようなログが出てくるはず。

```
*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

abcdefghijklmnopqrstuvwxyz012345

This may also be found at: /Users/hoge/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************
```
この時点で Jenkins は立ち上がっているので、インストールした Mac のブラウザから `http://localhost:8080/` にアクセスする。

すると以下の画面が表示されるので、上記のターミナルに表示された文字列「*abcdefghijklmnopqrstuvwxyz012345*」（※この文字列は仮、実際はターミナル上に表示された文字列）を、**Administrator password** 欄に入力して、**Continue** をクリック。

※ もしパスワードが見つけられない場合、コマンドラインで `cat /Users/{アカウント名}/.jenkins/secrets/initialAdminPassword` とすることでも確認できる。

|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475505/0a4fbc73-2c50-be69-6070-2bed47fd615d.png)|
|---|

次にプラグインのインストールの確認画面が出るので、左側のオススメセット（**Install suggested plugins**）をクリック。

|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475505/c47525a7-d3ac-dac0-2cf5-b9f8741a44d0.png)|
|---|

しばらくインストール中の画面が表示されて…

|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475505/ed7889bc-50b7-a090-2105-4832006fb2fb.png)|
|---|

管理ユーザーを作成する画面が表示されるので、項目を記入して **Save and Continue** をクリック。

|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475505/fc59396f-540c-71a2-e36c-44a7e1f42014.png)|
|---|

次に URLの設定画面になるが、変更せずに **Save and Finish** をクリック。

|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475505/f9388351-eb53-f06e-8048-a7e1e502e279.png)|
|---|

もう１画面…！
**Start using Jenkins** をクリック。

|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475505/482e02fa-1112-e075-d625-1c3bb704683a.png)|
|---|

で、無事に起動。

|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475505/838cf676-0cb1-6505-bd38-40e233c7bec0.png)|
|---|

初期設定が終わったので、ここで **一旦 Jenkins を終了**させる。
（先ほど Jenkins を起動したターミナル上で `Ctrl-C` ）

##他の PC からアクセスできるように Jenkins を起動
###設定ファイルの書き換え
Jenkins を起動する時に適用される設定ファイルを編集する。
以下は `vi` を使う例だが、使い慣れているテキストエディタでも可。

```bash:terminal
$ vi /usr/local/Cellar/jenkins/{バージョン名}/homebrew.mxcl.jenkins.plist
```
以下の行を見つけて、**Jenkins を起動する Mac のIPアドレス** に書き換える。

```bash:editor
    <string>--httpListenAddress={IPアドレス}</string>
```
例：`<string>--httpListenAddress=192.168.1.10</string>`
もしIPアドレスが分からなければ、`0.0.0.0` でもOK

###Jenkins のバックグラウンド起動

初期設定時は `jenkins` で起動したが、バックグラウンドで起動したいので、`brew services` コマンドを使用する。

```bash:terminal
$ brew services start jenkins
```

先の例の場合、他の PC から `http://192.168.1.10:8080/` で接続できる。
なお、Jenkins が起動しているかどうかは、以下のコマンドで確認可能。

```bash:terminal
#プロセスで確認する場合
$ ps aux | grep jenkins

#brewコマンドでも確認できる
$ brew services list
```

Jenkins の終了や再起動は以下で。

```bash:terminal
#Jenkins を終了する時
$ brew services stop jenkins
#Jenkins を再起動したい時
$ brew services restart jenkins
```

以上です。


##補足：JDK の確認・バージョン等を変更する場合
コマンドラインで `java -version` とすることで、JDK のバージョン等を確認できる。

```bash:terminal
$ java -version
java 11.0.1 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
```
上記のようなバージョン表記の場合、**Oracle の Java (JDK)** であり、商用利用には有償ライセンス契約が必要になるので、無償＆サポート期間の長い **JavaAdoptOpenJDK 8** をインストールして切り替える。

```bash:terminal
$ brew tap adoptopenjdk/openjdk
$ brew cask install adoptopenjdk8
```
上記コマンドでインストール後、現在インストールされている Java を `/usr/libexec/java_home -V` で確認する｡（※ **V** は大文字）

```bash:terminal
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
  11.0.1, x86_64:    "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
  1.8.0_222, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
```
この例の場合、**Oracle の Java SE 11.0.1** と **AdoptOpenJDK 8** の２つがインストールされている。

インストールした **AdoptOpenJDK 8（ver. 1.8.0）** に切り替えるため、`~/.bash_profile` に環境変数 `JAVA_HOME` を設定し、パスを通す。
（もちろん、既に `~/.bash_profile` に `JAVA_HOME` や `JAVA_HOMEへのパス` を通す設定があれば、該当箇所を書き換え）

```bash:terminal
$ echo 'export JAVA_HOME=`/usr/libexec/java_home -v 1.8`' >> ~/.bash_profile
$ echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
```
インストール後、コマンドラインで `java -version` と打って、**OpenJDK のバージョン** が表示されればOK。

```bash:terminal
$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.222-b10, mixed mode)
```

## 参考
- [AdoptOpenJDK/homebrew-openjdk - GitHub](https://github.com/AdoptOpenJDK/homebrew-openjdk)
- [iOSプロジェクトをビルドするJenkinsを構築する - Qiita](https://qiita.com/hiroyukimizukami@github/items/d94cc4c7607500d43fd9)