CircleCI RunnerをUIから簡単に使えるか試してみた！

皆様こんにちは！CircleCIカスタマーサクセスマネージャーの小島です。
前回の記事では挫折と苦労を繰り返しながら、CircleCI RunnerをCLIを利用してインストールをしてみました。
沢山のユーザーの方々からも、インストールの手順を簡素化してほしいというリクエストがあり、、、
この度、CircleCI Runnerが５分以内にUIからダウンロードできるようになったという製品リリースが発表されました！！！
そこで、実際に５分以内に完了できるか挑戦してみました！

参考URL: 
https://circleci.com/blog/install-runner-in-five-minutes/#:~:text=Activate%20the%20Self%2DHosted%20Runner,Accept%20the%20Runner%20Terms 

https://circleci.com/docs/2.0/runner-installation 



## CircleCIランナーをUI上から利用設定

* CircleCI Web UI →左のメニュータブの中にあるOrganization Settingsへ飛ぶ

* Self-Hosted RunnersのタブをクリックしてCircleCI Runner Termsに合意する
![スクリーンショット 2022-07-04 9.17.44 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634965/21cdc778-5f88-8be4-75e4-0e0df3223db0.png)


合意するとWeb UIの左メニューの中にSelf-Hosted Runnersが追加されるのでそこでリソースクラスを作成していきます。

## NamespaceとResource Classラベルの指定
Namespaceは自分のorg名などの分かりやすい名前を指定し、1つのorgに1つのNamespaceしか作成できないので、毎回リソースクラスを作成する時は同じNamespaceを使用します。
デフォルトではorg名がNamespaceの設定欄に入っているので、もう既に既存のNamespaceを作っている方は、そちらに変更してください。
![スクリーンショット 2022-07-04 9.19.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634965/c37560bb-e43c-ab0b-ca80-60e354865a62.png)


Runnerを使用しているマシーンにインストールリソースクラスを作成し保存すると、Token Keyが生成されるので、コピーして保存しておいてください。
![スクリーンショット 2022-07-04 9.28.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634965/0a0ea602-4477-a626-fa4b-b9e0a7406740.png)


ここまでは本当に数分で完了いたしました！！！
この次のステップからをできれば簡素化してほしかったです。
結局CLIを使用して自身のマシーンにLaunch Agentをインストールしなければなりません。。
各プラットフォームにローンチエージェントをインストールToken Keyが発行されたページをスクロールすると、各プラットフォームへのインストール手順が記載されております。

## ローンチエージェントシェルスクリプトのダウンロード

ターミナルからスクリプトをアクセスしやすい場所へダウンロードし、その場所からmacOS向けのローンチエージェントをインストールしていきます。

```
# For macOS x86_64:
export platform=darwin/amd64 && sh ./download-launch-agent.sh

# For macOS M1:
export platform=darwin/arm64 && sh ./download-launch-agent.sh
```

## ランナー用のコンフィグファイルを作成

前回と同様にlaunch-agent-config.yamlを作成する必要があります。
中身は以下のテンプレートをもとに、AUTH_TOKEN, RUNNER_NAME, USERNAMEをご自身の設定に変更してください。
AUTH_TOKENはリソースクラスを作成した際に表示されるものをコピーし、ここに入れ替えてください。

```
api:
  auth_token: AUTH_TOKEN

runner:
  name: RUNNER_NAME
  command_prefix : ["sudo", "-niHu", "USERNAME", "--"]
  working_directory: /var/opt/circleci/workdir
  cleanup_working_directory: true

logging:
  file: /Library/Logs/com.circleci.runner.log
```


## CircleCI Runner コンフィグレーションのインストール

CircleCIランナー設定を格納するディレクトリをrootで作成します。
```
sudo mkdir -p "/Library/Preferences/com.circleci.runner"
```
先に作成した launch-agent-config.yaml をディレクトリにコピーし、パーミッションを 600 に変更します。
```
sudo cp "launch-agent-config.yaml" "/Library/Preferences/com.circleci.runner/launch-agent-config.yaml"
sudo chmod 600 "/Library/Preferences/com.circleci.runner/launch-agent-config.yaml"
```

## launched.plistのインストール

Library/LaunchDaemons/com.circleci.runner.plist を root の所有に設定し、パーミッション 644 で作成します。
```
sudo touch /Library/LaunchDaemons/com.circleci.runner.plistsudo chown root: /Library/LaunchDaemons/com.circleci.runner.plistsudo chmod 644 /Library/LaunchDaemons/com.circleci.runner.plist
```

以下を新しい /Library/LaunchDaemons/com.circleci.runner.plist ファイルにコピーしてください。
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.circleci.runner</string>

        <key>Program</key>
        <string>/opt/circleci/circleci-launch-agent</string>

        <key>ProgramArguments</key>
        <array>
            <string>circleci-launch-agent</string>
            <string>--config</string>
            <string>/Library/Preferences/com.circleci.runner/launch-agent-config.yaml</string>
        </array>

        <key>RunAtLoad</key>
        <true/>

        <!-- The agent needs to run at all times -->
        <key>KeepAlive</key>
        <true/>

        <!-- This prevents macOS from limiting the resource usage of the agent -->
        <key>ProcessType</key>
        <string>Interactive</string>

        <!-- Increase the frequency of restarting the agent on failure, or post-update -->
        <key>ThrottleInterval</key>
        <integer>3</integer>

        <!-- Wait for 10 minutes for the agent to shut down (the agent itself waits for tasks to complete) -->
        <key>ExitTimeOut</key>
        <integer>600</integer>

        <!-- The agent uses its own logging and rotation to file -->
        <key>StandardOutPath</key>
        <string>/dev/null</string>
        <key>StandardErrorPath</key>
        <string>/dev/null</string>
    </dict>
</plist>
```


## 起動したサービスを有効化する

これで、サービスを読み込むことができます。
```
sudo launchctl load '/Library/LaunchDaemons/com.circleci.runner.plist'
```


## CircleCIランナーを利用してビルドしてみる
Continueボタンを押すと、プロジェクトのconfig fileにRunnerを使用して作成したリソースクラスを使用するためにコードが表示されます。

![スクリーンショット 2022-07-04 9.36.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634965/b803e660-21a7-8677-e417-04b39b5259de.png)


こちらをコピペしてプロジェクトを実行すればCircleCI Runnerを使用したビルドが無事に成功しました。
![スクリーンショット 2022-07-15 17.23.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634965/1e13f79d-e6d1-14df-d854-bf72205cf4da.png)
![スクリーンショット 2022-07-15 17.23.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634965/ca4fb277-979a-a16e-cf0d-cc17054dd044.png)


## まとめ
まだまだ初心者の私が、CircleCI Runnerのインストールを5分で完了させることは難しかったです。
リソースクラスの作成までは簡単ですが、ローンチエージェントのインストール手順などに戸惑い予想以上に時間はかかりましたが、
前回よりドキュメントがわかりやすくなっているため比較的早くインストールは完了できました。
もう既にインストールされている方は、すぐに新しいリソースクラスを作成してさらにランナーでのビルドをぜひ増やしてみてください！