Closed18

actions/runner の`--ephemeral`オプションを試してみる

Futa HirakobaFuta Hirakoba

これ

  • 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のドキュメントに詳細な情報が掲載される予定です。一般的に利用できるようになったら、それらのドキュメントに直接リンクする予定です。

https://github.com/actions/runner/releases/tag/v2.282.0

https://github.com/actions/runner/pull/660

Futa HirakobaFuta Hirakoba

手っ取り早く試すために自分が持っているプライベートリポジトリにランナーを追加してみる

ランナー追加画面に行くとちゃんと最新版だった。

# 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

ていうかハッシュ値の確認なんてあったっけ?

Futa HirakobaFuta Hirakoba

手元の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...
まあまあかかるな

Futa HirakobaFuta Hirakoba
❯ tar xzf ./actions-runner-osx-x64-2.282.0.tar.gz

❯ ./config.sh --url https://github.com/korosuke613/playground-private --token ***

登録

Futa HirakobaFuta Hirakoba

ヘルプを見てみる

./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つのジョブしか受けないようにランナーを構成し、ジョブが終了した後にサービス側でランナーの構成を解除するようにします。

Futa HirakobaFuta Hirakoba

実行!

❯ ./run.sh --ephemeral

√ Connected to GitHub

2021-09-16 02:16:33Z: Listening for Jobs

とりあえずIdleになった。

Futa HirakobaFuta Hirakoba
❯ ./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

ジョブ終了しても終わんない...?

Futa HirakobaFuta Hirakoba

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)
...
Futa HirakobaFuta Hirakoba

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
❯

ちゃんと終わった!

消えた!

Futa HirakobaFuta Hirakoba
❯ ./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するのはいまだ必要っぽい

Futa HirakobaFuta Hirakoba

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
❯

自動で登録解除された。

Futa HirakobaFuta Hirakoba

わかったこと

  • config.sh--ephemeralをつけてランナー登録をすると、ジョブ終了時にランナーが自動で解除される
    • この時run.sh--ephemeralの有無は関係ない
  • config.shに--ephemeralをつけないでランナー登録し、run.sh--ephemeralをつけてランナーを起動しても、ジョブ終了時にランナーは自動で解除されない。
    • run.shも終了しない
Futa HirakobaFuta Hirakoba

そういえば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)
...
Futa HirakobaFuta Hirakoba

まとめ

  • ランナー登録時に実行するconfig.sh--ephemeralオプションをつけることで、使い捨てランナーが実現できる
    • --ephemeralオプションをつけて登録されたランナーは、ジョブ実行後にランナー登録を解除して./run.shを終える
      • .runnerディレクトリは削除してくれないバグがあるが、すぐに直されそう(#660)
    • run.sh--ephemeralオプションは使えない(特にエラーも出ないけど)
このスクラップは2021/09/16にクローズされました