actions/runner の`--ephemeral`オプションを試してみる
これ
- Support the
--ephemeral
flag (#660)- This optional flag will configure the runner to only take one job, and let the service un-configure the runner after that job finishes.
- 訳)このオプションのフラグは、1つのジョブのみを受けるようにランナーを設定し、そのジョブが終了した後にサービスがランナーの設定を解除するようにします。
- Expect to see more info in the Github API documentation soon. We'll link to those docs directly as they become generally available!
- 訳)近々、Github APIのドキュメントに詳細な情報が掲載される予定です。一般的に利用できるようになったら、それらのドキュメントに直接リンクする予定です。
- This optional flag will configure the runner to only take one job, and let the service un-configure the runner after that job finishes.
まとめはここ
手っ取り早く試すために自分が持っているプライベートリポジトリにランナーを追加してみる
ランナー追加画面に行くとちゃんと最新版だった。
# Create a folder
$ mkdir actions-runner && cd actions-runner
# Download the latest runner package
$ curl -o actions-runner-osx-x64-2.282.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.282.0/actions-runner-osx-x64-2.282.0.tar.gz
# Optional: Validate the hash
$ echo "0f9397794838202426c47f619ae6fb8609041ca141ae1df10836a07c371a9baf actions-runner-osx-x64-2.282.0.tar.gz" | shasum -a 256 -c
# Extract the installer
$ tar xzf ./actions-runner-osx-x64-2.282.0.tar.gz
ていうかハッシュ値の確認なんてあったっけ?
手元のmacで実行。
❯ mkdir actions-runner && cd actions-runner
/tmp/actions-runner
❯ curl -o actions-runner-osx-x64-2.282.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.282.0/actions-runner-osx-x64-2.282.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 645 100 645 0 0 2600 0 --:--:-- --:--:-- --:--:-- 2600
100 48.7M 100 48.7M 0 0 452k 0 0:01:50 0:01:50 --:--:-- 506k
/tmp/actions-runner took 1m50s
❯
ダウンロードに1m50s...
まあまあかかるな
❯ tar xzf ./actions-runner-osx-x64-2.282.0.tar.gz
❯ ./config.sh --url https://github.com/korosuke613/playground-private --token ***
登録
ヘルプを見てみる
./run.sh --help
...
--ephemeral Configure the runner to only take one job and then let the service un-configure the runner after the job finishes (default false)
...
あった。
Configure the runner to only take one job and then let the service un-configure the runner after the job finishes.
訳)1つのジョブしか受けないようにランナーを構成し、ジョブが終了した後にサービス側でランナーの構成を解除するようにします。
実行!
❯ ./run.sh --ephemeral
√ Connected to GitHub
2021-09-16 02:16:33Z: Listening for Jobs
とりあえずIdleになった。
❯ ./run.sh --ephemeral
√ Connected to GitHub
2021-09-16 02:16:33Z: Listening for Jobs
2021-09-16 02:17:31Z: Running job: build
2021-09-16 02:17:41Z: Job build completed with result: Succeeded
ジョブ終了しても終わんない...?
config.shにも--ephemeralが生えてた
❯ ./config.sh --help
...
--ephemeral Configure the runner to only take one job and then let the service un-configure the runner after the job finishes (default false)
...
removeしたあと今度はconfig.shに--ephemeralをつけて登録してみる。
❯ ./config.sh --ephemeral --url https://github.com/korosuke613/playground-private --token ***
起動してジョブを動かす
/tmp/actions-runner took 10s
❯ ./run.sh --ephemeral
√ Connected to GitHub
2021-09-16 02:21:36Z: Listening for Jobs
2021-09-16 02:21:51Z: Running job: build
2021-09-16 02:22:00Z: Job build completed with result: Succeeded
/tmp/actions-runner took 27s
❯
ちゃんと終わった!
消えた!
❯ ./config.sh --ephemeral --url https://github.com/korosuke613/playground-private --token ***
--------------------------------------------------------------------------------
| ____ _ _ _ _ _ _ _ _ |
| / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ |
| | | _| | __| |_| | | | | '_ \ / _ \ / __| __| |/ _ \| '_ \/ __| |
| | |_| | | |_| _ | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ |
| \____|_|\__|_| |_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ |
| |
| Self-hosted runner registration |
| |
--------------------------------------------------------------------------------
Cannot configure the runner because it is already configured. To reconfigure the runner, run 'config.cmd remove' or './config.sh remove' first.
もっかいやったら怒られた。手元でremoveするのはいまだ必要っぽい
どうやらバグらしい。GitHubの中の人がプルリク作ってるからそのうち対応されると思う。(社内kintoneで実況してたら弊社社員に教えてもらった)
config.sh
に--ephemeral
をつけて登録したあと、何もつけずにrun.shを実行した
/tmp/actions-runner took 6s
❯ ./run.sh
√ Connected to GitHub
2021-09-16 02:26:04Z: Listening for Jobs
2021-09-16 02:26:25Z: Running job: build
2021-09-16 02:26:34Z: Job build completed with result: Succeeded
/tmp/actions-runner took 32s
❯
自動で登録解除された。
わかったこと
-
config.sh
に--ephemeral
をつけてランナー登録をすると、ジョブ終了時にランナーが自動で解除される- この時
run.sh
の--ephemeral
の有無は関係ない
- この時
- config.shに--ephemeralをつけないでランナー登録し、
run.sh
に--ephemeral
をつけてランナーを起動しても、ジョブ終了時にランナーは自動で解除されない。-
run.sh
も終了しない
-
Is this flag meant for config.sh or run.sh?
The flag is meant to be run during config.sh on mac/linux. We should have official docs for these on github.com soon, which hopefully will make this easier, but feel free to use this feature now!
まだconfig.sh
での動作のみを想定しているっぽい。
そういえばconfig.shとrun.shのヘルプって同じ内容だった。思いっきしConfig Optionsに入ってたわ
❯ ./run.sh --help
...
Config Options:
...
--ephemeral Configure the runner to only take one job and then let the service un-configure the runner after the job finishes (default false)
...
まとめ
- ランナー登録時に実行する
config.sh
に--ephemeral
オプションをつけることで、使い捨てランナーが実現できる-
--ephemeral
オプションをつけて登録されたランナーは、ジョブ実行後にランナー登録を解除して./run.sh
を終える-
.runner
ディレクトリは削除してくれないバグがあるが、すぐに直されそう(#660)
-
-
run.sh
に--ephemeral
オプションは使えない(特にエラーも出ないけど)
-
公式アナウンスきてた
GitHub Actions: Ephemeral self-hosted runners & new webhooks for auto-scaling | GitHub Changelog