shippable + AWSを使ってARMアーキテクチャのCI環境を作ってみた

[shippable](https://www.shippable.com/)とAWSを使ってARM64アーキテクチャでCIが出来る環境を作ってみたので備忘録として書いておきます。

# CI用のマシンについて

shippableでは[ARMのCI](http://blog.shippable.com/shippable-arm-packet-deliver-native-ci-cd-for-arm-architecture)をサポートしています。
~~ただし、On DemandではなくBYONノードとしてのみライセンスが購入できます。~~
~~そのため、CI用のマシンを別途用意する必要があります。~~
<font color=#FC0107>問い合わせれば無料版を払い出してくれるようです。</font>

[Running jobs on Arm machines](http://docs.shippable.com/platform/tutorial/workflow/run-ci-builds-on-arm/)

> Click on the Contact Us link and let us know if you want to run builds on 32-bit or 64-bit Arm machines, and whether your repositories are public or private. Accordingly, a Shippable Admin will add the requested license for your subscription.

現在、shippableがサポートしているARMのCI用マシンは[Ubuntu 16.0.4](http://docs.shippable.com/platform/tutorial/runtime/manage-byon-nodes/)です。

ここでは、CI用のマシンをAWSのARM版のAMI(Ubuntu)で用意してshippableと連携してみます。

# AWSでARM版のEC2を用意

ここでは、以下のAMIを使ってインスタンスを起動しておきます。

[![スクリーンショット 2019-06-10 20.05.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/5d816d3c-d0e7-c2a6-ae9b-0ce449b74b1d.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/5d816d3c-d0e7-c2a6-ae9b-0ce449b74b1d.png)

# shippableの設定

shippableでは、1アカウント1つのPLANまで無償で使えます。
そのため、ARM + x86_64を同時に使おうとすると有償になります。
なのでここでは、標準で設定されているOn Demandのx86_64(Ubuntu)を削除してARMを使うようにします。

## PLANの設定

`SUBSCRIPTIONS` で登録したアカウントを選択し `歯車` をクリックし `Billing` を開きます。

[![スクリーンショット 2019-06-10 20.10.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/daeb7657-baed-2671-deb3-9229f4b689ea.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/daeb7657-baed-2671-deb3-9229f4b689ea.png)

`鉛筆マーク` をクリックします。

[![スクリーンショット 2019-06-10 20.13.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/153d9c03-a256-0a71-57a9-f28e6749aa01.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/153d9c03-a256-0a71-57a9-f28e6749aa01.png)

`Add new SKU` をクリックします。

[![スクリーンショット 2019-06-10 20.15.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/105f8868-a210-4d87-2eb0-9c5223a04668.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/105f8868-a210-4d87-2eb0-9c5223a04668.png)

以下のように選択します。

| Type | Architecture | Operating System |
|------|--------------|------------------|
| BYON | aarch64      | Ubuntu_16.04     |

[![スクリーンショット 2019-06-10 20.16.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/34513769-fa2c-31de-4562-bf94bad736b9.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/34513769-fa2c-31de-4562-bf94bad736b9.png)

標準であったPLANの `ゴミ箱マーク` をクリックして削除し `Enable unlimited private repo builds` のチェックを外し `Save(画像ではUpgradeになってる)` をクリックして保存します。

[![スクリーンショット 2019-06-10 20.18.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/c578d70d-3e78-daf3-78e1-b7a1fe4d59f3.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/c578d70d-3e78-daf3-78e1-b7a1fe4d59f3.png)

次に `Node Pool` にCI用の `Node` を追加します。
`歯車` をクリックして `Node Pools` を選択します。

[![スクリーンショット 2019-06-10 20.21.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/1e2213b0-1aa8-67ba-b193-6819b2a7eabc.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/1e2213b0-1aa8-67ba-b193-6819b2a7eabc.png)

既に作成されている `Node Pool` をクリックします。

[![スクリーンショット 2019-06-10 20.25.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/819b959e-809f-9bd8-f0e4-a65691ba7826.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/819b959e-809f-9bd8-f0e4-a65691ba7826.png))

画面右上の `+(プラス)` をクリックします。

[![スクリーンショット 2019-06-10 20.26.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/12997dea-5ac6-92cf-a72c-7f57a33f5b14.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/12997dea-5ac6-92cf-a72c-7f57a33f5b14.png)

以下を入力します。

|      項目      |             パラメーター             |
|----------------|--------------------------------------|
| Docker Version | 18.03                                |
| Name           | shippableのNODESで表示する任意の名前 |
| IP Address     | EC2へSSHできるグローバルIPアドレス   |

`SSH Access Script` の `Copy` をクリックしてEC2のUbuntuで実行しておきます。

問題なくスクリプトが実行できたら `SSH Accept Script Complete` にチェックを入れて `Initialize` をクリックします。

[![スクリーンショット 2019-06-10 20.27.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/aea0de20-b560-fead-4713-555e0ed00a5a.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/aea0de20-b560-fead-4713-555e0ed00a5a.png)

問題なく登録できればノードのステータスが `Processing` になります。

[![スクリーンショット 2019-06-10 20.32.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/eb55073d-25bf-939d-8018-d891b993a038.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/eb55073d-25bf-939d-8018-d891b993a038.png)

初期処理が問題なく完了すればステータスが `Success` になります。

[![スクリーンショット 2019-06-10 20.37.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/4fb48cfa-4fe9-f8b6-252f-84ed5a0a1105.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180118/4fb48cfa-4fe9-f8b6-252f-84ed5a0a1105.png)

これで、準備完了です。
GitHubのリポジトリを登録してCIを走らせてみましょう :)