Closed9
GitHub Actions の Self-hosted Runner の Just-in-time を試してみる
これ
Kesin11 さんの記事(大変わかりやすい)を参考に自分でも試してみる
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
をランナーのマシンに渡す必要はあるが、それだけで済む)
- デフォルトで着いていた
試してみて
- 実際便利
- ARC の Scale Set モードを使わないオートスケールの選択肢としてはこっちを使っていくのが良さそうな予感
- まだ作成の API しかない
- 登録ランナー一覧(
GET /repos/{owner}/{repo}/actions/runners/{runner_id}
)から情報を取得できるっぽい
- 登録ランナー一覧(
- 作成時のレスポンスの
.runner.labels[].type
にラベルのタイプが入るっぽいけど、何を表すかよくわかんない-
GET /repos/{owner}/{repo}/actions/runners/{runner_id}
にもあるので、昔からある情報っぽい。あんま気にせんでいいか
-
JIT runner の登録 API に着いて
API は Org と Repo のスコープである。Enterprise レベルはなさそう。
JIT runner 登録 API を叩くための PAT 生成。
今回は個人のリポジトリで試してみる。
必要な API トークンのスコープは repo
。
と API ドキュメントにあるが、fine-grained PAT の場合は Administration
らしい。
生成。Metadata
もつられてやってくる。
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": ***
}
簡単にできた。
登録されてるねぇ
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 って出てる
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にクローズされました