JetsonでGitHub ActionsのSelf-hosted Runnerをサービスとして動かす

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

# 0. はじめに

タイトルの通りですが、Jetson Xavier NX Developer KitにGitHub ActionsのSelf-hosted Runnerをインストールしたという内容になります。

Jetsonを使おうかという人はGitHub Actionsをインストールするのなんて息をするようにできるので記事がないのかもしれないですね。

# 1. 環境

機種: Jetson Xavier NX Development Kit
NVIDIA JetPack SDK: Jetpack 5.1.1
Linux： Linux jetsonnx4 5.10.104-tegra #1 SMP PREEMPT Sun Mar 19 07:55:28 PDT 2023 aarch64 aarch64 aarch64 GNU/Linux


# 1. GitHubでリポジトリーを作成する

割愛します。
PublicでもPrivateでもどちらでもかまいません。

# 2. Runnerインストール
## 2-1. Runnerインストールの手順をGitHubで表示

Settings > Actions > Runnersから「New self-hosted runner」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/f66fba05-bde6-35e8-bebf-0fd52223f4b0.png)

## 2-2. Jetson向けの手順に切り替え

手順が表示されるので、`Runner image`で「Linux」を選択、`Architecture`で「ARM64」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/51db7533-19b7-b387-f4bd-475135422852.png)

## 2-3. 手順通りにダウンロードして展開

- フォルダー作成

```sh
mkdir actions-runner && cd actions-runner
```

- Runnerパッケージをダウンロード
```
curl -o actions-runner-linux-arm64-2.304.0.tar.gz -L 
https://github.com/actions/runner/releases/download/v2.304.0/actions-runner-linux-arm64-2.304.0.tar.gz
```

- パッケージが正しいか確認(オプション)
```
echo "34c49bd0e294abce6e4a073627ed60dc2f31eee970c13d389b704697724b31c6  actions-runner-linux-arm64-2.304.0.tar.gz" | shasum -a 256 -c
```

- パッケージチェックサム確認
以下のようにOKが出ればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/8fd5b17c-c9c8-fb50-0092-76ede5b5f851.png)


- 展開
```
tar xzf ./actions-runner-linux-arm64-2.304.0.tar.gz
```

- 展開内容を確認

以下のようになっていればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/a003e31d-ce1e-0b19-7715-43ac005e594c.png)


## 2-4. 設定

展開したディレクトリで./config.shを実行する
以下のコマンドではなくて、GitHubの手順のコマンドを実行すること

途中インタラクティブに入力を求められるが基本的にはエンターだけでOK。
Runnerを複数動かして、ホスト名が同じだと区別が付かなくなる場合は入力した方が賢明
グループ分けとかもできるようだ

```
./config.sh --url https://github.com/yourname/your-repository-name --token XXXXXXXXXXXXXXXXXXXXXXX
```

- 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/1ff71b5d-e026-cf5c-8a24-49e0f2742c0d.png)


## 2-5. 実行

手順では以下の`./run.sh`だけです

```
./run.sh
```

しかし、これで動かすとずっとジョブ待ちになってしまってコンソールが奪われてしまうので、サービスとして動かします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/2a83a42c-8941-3702-6672-35b5c67efea9.png)

# 3. Actions Runnerをサービスとして起動する

## 3-1. サービスインストール

展開されたディレクトリにある`svc.sh`ファイルを利用して、systemdファイルを作成します。

```
sudo ./svc.sh install
```

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/d342e3ce-32db-266e-fb26-8faa0c426ca7.png)

ログインしたユーザー以外で動かす場合は、USERNAMEを付けるとよいようです
```
./svc.sh install USERNAME
```
[Configuring the self\-hosted runner application as a service \- GitHub Docs](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service#installing-the-service)

しかし、systemdファイルを作っただけではサービスとして起動していないのでsystemctlコマンドで起動します

## 3-2. GitHub Runnerサービスを開始する

コマンドで状態を確認する。

```
systemctl status actions.runner.<YourRepositoryName>-runner.<Hostname>.service
```

サービス名が分からない場合は、以下のコマンドで出てきたファイル名がサービス名になる
```
ls -la /etc/systemd/system/actions.runner*
```

まだ起動していないので以下のようにinactiveでdeadの状態、有効化はされている模様
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/1aca300c-4304-6c3d-8505-031bed2a7759.png)

以下のコマンドで起動する

```
sudo systemctl start actions.runner.<YourRepositoryName>-runner.<Hostname>.service
```

:::note info
※補足:
svc.shコマンドを使うと、`start`、`status`、`stop`できるそうです

- 起動
```
sudo ./svc.sh start
```
- ステータス
```
sudo ./svc.sh status
```

- 停止
```
sudo ./svc.sh stop
```

Configuring the self-hosted runner application as a service - GitHub Docs
https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service#starting-the-service
:::

## 3-3. 起動状態を確認

以下のコマンドで起動状態を確認する

```
sudo systemctl status actions.runner.<YourRepositoryName>-runner.<Hostname>.service
```

- 起動状態を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/2aecf55d-5095-bc84-47ca-21de80014ef9.png)

## 3-4. GitHub側で確認

以下のようにRunnersで Statusが`Idle`になっていればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/f399ba90-e16d-0f69-fe18-9d5bbcdb42ac.png)

以下のように`Offline`だとサービスが落ちているか、接続できていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/f73b172c-9065-6111-4032-4938c1992e98.png)

# 4. まとめ

JetsonでもGitHub Runnerを動かせました。
サービスとして動かせたので再起動後も自動的にRunnerが起動して利用することができます。

# 5. 参考資料

GitHub Actionsでself-hosted runnerを使ってみる - とことんDevOps | 日本仮想化技術が提供するDevOps技術情報メディア
https://devops-blog.virtualtech.jp/entry/20220926/1664160391