【iOS】jenkinsでfastlaneを実行してtestやipaファイルの作成を行う

iOSユーザーはfastlaneを使うと、testやipaファイルを作るのが自動で出来ると聞いたので早速利用してみることにしました。
ここでは、jenkinsからfastlaneを実行するまでを解説いたします。

# jenkinsのセットアップ

自分は、macでhomebrewを使ってインストールしました。
homebrewを使ってインストールした場合は、PCにjenkinsのユーザーが作られず、ログイン中のユーザーに作成されます。

## homebrew でインストール

```shell
brew install jenkins
```

今回は、fastlaneで実行するのでjenkinsにgitのpluginが入っていれば、他は特に必要ありません。

#### ・jenkinsがインストールされる場所

```
/usr/local/opt/jenkins
```

## 自動起動の設定

```
cp -p /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
```
を実行することで、/usr/local/opt/jenkins/に作成された、homebrew.mxcl.jenkins.plistファイルを~/Library/LaunchAgentsにコピーすることができます。

#### ・自動起動の設定

```
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
```

#### ・自動起動の解除

```
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
```

を実行することで、PCを立ち上げると自動で起動したり解除したりできます。

## 再起動方法

```
launchctl stop homebrew.mxcl.jenkins
launchctl start homebrew.mxcl.jenkins
```

他に、　webからも実行することができます。

```
http://localhost:8080/safeRestart
```

# gitからリポジトリをcloneする

jenkinsの左上にある、新規ジョブ作成を選択します。
以下のような画面になるので、
Enter an item name にジョブの名前を入力　-> フリースタイル・プロジェクトのビルド を選択 -> OK
を選択します。

![new job.png](https://qiita-image-store.s3.amazonaws.com/0/194104/38fb487c-e494-8782-2287-a39cd667371e.png)

するとジョブの設定画面になるので、
ソースコード管理 -> git 
を選択して、リポジトリURLを入力します。

![jenkins_sourcecode.png](https://qiita-image-store.s3.amazonaws.com/0/194104/587a258e-1627-5b4e-f402-e933115ee104.png)

今回はbitbucketを利用して非公開リポジトリを設定したので、ssh接続が必要でした。

 [・Bitbucketでssh接続する方法](http://qiita.com/nadioo/items/3bbf904d25222e29d7a6)

![error_ssh.png](https://qiita-image-store.s3.amazonaws.com/0/194104/b1035c31-ac54-8ce7-136a-6e495f39562c.png)

のようなエラーが出たら、ssh接続が出来ていないようです。
ssh接続が出来ていても、初めてssh接続する場合は、ここに書かれている

```
"git ls-remote -h git@bitbucket.org:ユーザー/sample.git HEAD"
```

のコマンドを実行するとエラーが出なくなります。

エラーが出なければ保存して、ジョブの画面に戻ります。
ジョブの画面から**ビルド実行**を選択します。

エラーが発生せずに完了したら、gitからプロジェクトがクローンされます。

#### ・リポジトリがクローンされる場所

```
/Users/ユーザー/.jenkins/workspace
```

workspaceの中にプロジェクトがクローンされます。

# jenkinsでfastlaneを実行する

ジョブの画面に戻り、
設定 -> ビルド -> ビルド手順の追加 -> シェルの実行
を選択します。

![jenkins_shell_setting.png](https://qiita-image-store.s3.amazonaws.com/0/194104/7920d5dc-787f-c30f-0301-395c976a8337.png)

シェルスクリプトの所に、

```
fastlane test
```
もしくは、bundlerを使用してfastlaneを利用している場合は、

```
bundle exec fastlane test
```

と設定すれば動き出すはずですが、コンソールを確認すると以下のようなエラーが発生します。

```
+ bundle exec fastlane beta
/var/folders/md/xg9wzwvj04s8_cv48zg72v0h0000gp/T/jenkins6293955055621288425.sh: line 2: bundle: command not found
Build step 'シェルの実行' marked build as failure
Finished: FAILURE
```

## PATHの設定

原因はbundleのコマンドが無いと言っていますので、PATHが通っていないことが考えられます。
そこで、PATHを通す設定をします。

```
export PATH=/usr/local/bin:$PATH
```

これで実行すると、次はまた別のエラーが発生します。。

```
+ export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+ PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+ bundle exec fastlane beta
/Library/Ruby/Gems/2.0.0/gems/fastimage-2.1.0/lib/fastimage.rb:67: warning: already initialized constant URI::DEFAULT_PARSER
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/uri/common.rb:545: warning: previous definition of DEFAULT_PARSER was here

Looking for related GitHub issues on fastlane/fastlane...

➡️  [33mcharacter encoding: US-ASCII and UTF-8[0m
    https://github.com/fastlane/fastlane/issues/8234 [[32mclosed[0m] 5 💬
    2 weeks ago

➡️  [33mincompatible character encodings: UTF-8 and US-ASCII in a Jenkins Pipeline[0m
    https://github.com/fastlane/fastlane/issues/8680 [[32mclosed[0m] 3 💬
    4 weeks ago

➡️  [33mfastlane not working after updating ruby.[0m
    https://github.com/fastlane/fastlane/issues/8529 [[32mclosed[0m] 7 💬
    4 weeks ago

and 3 more at: https://github.com/fastlane/fastlane/search?q=incompatible%20character%20encodings:%20US-ASCII%20and%20UTF-8&type=Issues&utf8=✓

🔗  You can ⌘ + double-click on links to open them directly in your browser.
```

## ローケルを設定

上記エラーにあるfastlaneの**issues:8234**を確認するとローケルが設定されていない等のことが書かれています。
そのため以下のようにローケルの設定を追加します。

```
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
```

## シェルスクリプトの内容

最終的には、シェルスクリプトに以下を設定することになります。

```
export PATH=/usr/local/bin:$PATH
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

bundle exec fastlane test
```

これでjenkinsでfastlaneを実行することが出来ました！