Closed9

GitHub Actions の Self-hosted Runner の Just-in-time を試してみる

Futa HirakobaFuta Hirakoba

これ
https://github.blog/changelog/2023-06-02-github-actions-just-in-time-self-hosted-runners/

Kesin11 さんの記事(大変わかりやすい)を参考に自分でも試してみる
https://zenn.dev/kesin11/articles/20230607_runner_jitconfig

Futa HirakobaFuta Hirakoba

Kesin11さんの記事を読んだ雑なメモ

  • REST API によって 1 ジョブだけを処理できるランナーを登録できるようになった
  • GitHub によると強めの権限のトークンを外部に晒す必要がなくなることでセキュリティの向上が見込めるとのこと
  • 使い方
    • ランナー設定を入力として新たな API を叩く
    • 返り値の encoded_jit_config を取得
    • encoded_jit_config./run.sh に渡す
    • 起動
  • 本来は先に ./config.sh を叩いて設定が必要
    • その時に専用のトークンを渡さないといけない
  • 嬉しいこと
    • デフォルトで着いていた self-hosted, Linux(OS ごとのラベル), X86(CPU アーキテクチャのラベル)を無くせる
    • ジョブを処理するとランナーが自動で登録解除されて楽
    • config.sh をランナーのマシン本体で起動する必要がなくなり、github から webhook を受けるバックエンド側でランナー登録が可能(encoded_jit_config をランナーのマシンに渡す必要はあるが、それだけで済む)
Futa HirakobaFuta Hirakoba

試してみて

  • 実際便利
  • ARC の Scale Set モードを使わないオートスケールの選択肢としてはこっちを使っていくのが良さそうな予感
  • まだ作成の API しかない
    • 登録ランナー一覧(GET /repos/{owner}/{repo}/actions/runners/{runner_id})から情報を取得できるっぽい
  • 作成時のレスポンスの .runner.labels[].type にラベルのタイプが入るっぽいけど、何を表すかよくわかんない
    • GET /repos/{owner}/{repo}/actions/runners/{runner_id} にもあるので、昔からある情報っぽい。あんま気にせんでいいか
Futa HirakobaFuta Hirakoba

試すよ

  • JIT runner の登録: 自分の Mac
  • ランナー本体: Mac 上に立てた Ubuntu VM[1]

でやってみる。

脚注
  1. ちなみに Ubuntu VM は最近話題の Orb Stack で作ったやつを使う。ちな ARM。 ↩︎

Futa HirakobaFuta Hirakoba

JIT runner 登録 API を叩くための PAT 生成。

今回は個人のリポジトリで試してみる。

必要な API トークンのスコープは repo
と API ドキュメントにあるが、fine-grained PAT の場合は Administration らしい。

生成。Metadataもつられてやってくる。

Futa HirakobaFuta Hirakoba

JIT runner 登録

コマンド
curl -L \
  -X POST \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer $JIT_TOKEN"\
  -H "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/repos/korosuke613/playground-private/actions/runners/generate-jitconfig \
  -d '{"name":"New runner","runner_group_id":1,"labels":["my-ubuntu-arm64"]}'
アウトプット
{
  "runner": {
    "id": 37,
    "name": "New runner",
    "os": "unknown",
    "status": "offline",
    "busy": false,
    "labels": [
      {
        "id": 11,
        "name": "my-ubuntu-arm64",
        "type": "read-only"
      }
    ],
    "runner_group_id": 1
  },
  "encoded_jit_config": ***
}

簡単にできた。


登録されてるねぇ

Futa HirakobaFuta Hirakoba

JIT runner 起動 in ubuntu

ランナーのバイナリなどを落としてくる。

in ubuntu
korosuke613@ubuntu:~$ mkdir actions-runner && cd actions-runner
korosuke613@ubuntu:~/actions-runner$ curl -o actions-runner-linux-arm64-2.305.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.305.0/actions-runner-linux-arm64-2.305.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 83.0M  100 83.0M    0     0  15.7M      0  0:00:05  0:00:05 --:--:-- 18.5M
korosuke613@ubuntu:~/actions-runner$ tar xzf ./actions-runner-linux-arm64-2.305.0.tar.gz
korosuke613@ubuntu:~/actions-runner$

ドキュメント通り、./run.sh --jitconfig ${encoded_jit_config}で起動する。

in ubuntu
korosuke613@ubuntu:~/actions-runner$ ./run.sh --jitconfig $JIT_CONFIG

√ Connected to GitHub

Current runner version: '2.305.0'
2023-06-19 05:40:03Z: Listening for Jobs

来たわね


idle なった


configuration になんか入った。ちゃんと orb-stack って出てる

Futa HirakobaFuta Hirakoba

JIT runner でジョブを動かす

適当なワークフローを動かす。

.github/workflows/test-workflow-jit.yaml
name: Test workflow for JIT
on:
  workflow_dispatch:
jobs:
  test:
    runs-on: my-ubuntu-arm64
    steps:
      - name: Hello world
        run: echo "Hello world"
      - name: Print spec
        run: |
          echo OS
          lsb_release -a
          uname -a
          echo CPU
          cat /proc/cpuinfo
          
          echo Memory
          cat /proc/meminfo
          
          echo Storage
          df


動いた

一回のみ実行され、自動でプロセスが終了した。

in ubuntu
korosuke613@ubuntu:~/actions-runner$ ./run.sh --jitconfig $JIT_CONFIG

√ Connected to GitHub

Current runner version: '2.305.0'
2023-06-19 05:40:03Z: Listening for Jobs
2023-06-19 05:47:36Z: Running job: test
2023-06-19 05:47:45Z: Job test completed with result: Succeeded
√ Removed .credentials
√ Removed .runner
Runner listener exit with 0 return code, stop the service, no retry needed.
Exiting runner...
korosuke613@ubuntu:~/actions-runner$


ランナーは登録解除された

このスクラップは2023/06/19にクローズされました