バージョン管理された人

subversionで管理されてます

GitHub Actions の Self hosted runner で --ephemeral オプションでの罠

GitHub Actions の Self hosted runner で設定するときに、 config.sh--ephemeral オプションを指定することで、 Self hosted runner を短命にできる。

短命である とは1つのジョブを走らせたあとに self hosted runner が終了することをいう。 --ephemeralv2.282.0 で導入されたが、これ以前は self hosted runner は1つのジョブを走らせた後も終了することなく再度ジョブが来たらそのままジョブを走らせることしかできなかった。 このため、内部でシステムの状態を変更させるようなタスク(apt-get でパッケージをインストールするなど)を走らせると、その後のジョブにもその影響を与えることができてしまっていた(たとえば、あるジョブで apt-get install -y python3 としてしまうと、その後に同じ self hosted runner で走るジョブでは python3 をインストールしていないのに python3 を使えてしまえていた。

self hosted runner は自動アップデートが走るのだが、その際、 self hosted runner を走らせているプロセス(run.sh)を終了させて再度 self hosted runner を起動するというようになっているがこれと --ephemeral との相性が悪い。 これは --ephemeral がついてないときはこれらの処理は正常に働き、アップデートが完了したら再度 self hosted runner が走るようになっていた。 しかし、 --ephemeral を設定して self hosted runner を起動していると、自動アップデートした際に self hosted runner を走らせているプロセス(run.sh) が自動で終了するまではいいのだが、その後に self hosted runner が起動してこなくなる。 自動でアップデートしてくれないので、 self hosted runner を走らせているインスタンスを終了して最新バージョンをインストールしたインスタンスを起動しなおすなどしてもいいと思う。

ちなみに、 linux かつ x64 な self hosted runner のコードを取得するには次のコマンドを実行すればよい:

$ curl -s https://api.github.com/repos/actions/runner/releases/latest \
    | jq -r '.assets[]|select(.name|contains("linux-x64"))' \
    | jq -r .browser_download_url

linux-x64 の部分を好きなように書き換えれば、他のアーキテクチャに置き換えられる。 サポートされているものについては actions/runner のリリースを見て欲しい。