sitateru tech blog: GCE

sitateru tech blog

シタテルの技術やエンジニアの取り組みを紹介するテックブログです。

ラベル GCE の投稿を表示しています。 すべての投稿を表示
ラベル GCE の投稿を表示しています。 すべての投稿を表示

2020年7月10日金曜日

GCPでGitHub Actionsのセルフホストランナーを作った

7月 10, 2020
朝野です。少し前の話ですが、GitHubの料金が全体的に値下げされましたね。

https://github.co.jp/pricing.html

Teamプランは1ユーザーあたり4ドルになったのですが、さりげなく同時にGitHub Actionsの利用時間(organizationのプライベートリポジトリ全体で)が月3000分まで、と減ってしまいました 😥 (前は10000分)
以前の記事(GitHub ActionsとCypressでサイト監視してみる|sitateru tech blog)で紹介したようなCypressを使った監視をActionsで動かしていたので、月3000分は少ないなーと思って料金を見てみたところ・・・


https://github.co.jp/features/actions#pricing

セルフホストはタダなのか!しかしセルフホストって何だ?🤔
ということでやってみました。

セルフホストランナーについて - GitHub Docs

セルフホストランナーというのは、GitHub Actionsを実行するマシンのことです。自分の管理下にあるサーバーやPCでActionsが実行できちゃいます。前述のように、セルフホストランナーで実行する分にはGitHubに対して課金は発生しません。

・・・おっ、ということはGCPの永久無料枠のCompute Engineインスタンスを使えばタダで回し放題やんけ!( ^ω^)
Google Cloud の無料枠 | Google Cloud Platform の無料枠

と思ったのですが、先に結論を書きます、コンテナ上でCypressテストを実行するには無料枠の f1-micro では処理能力的に無理でした。もっと軽い処理なら足りるのかもしれませんが・・・
e2-micro ならなんとか動いたのでこれで良しとしましょう。

さて、セルフホストランナーをクラウド上のLinuxインスタンスで構築する手順に行きたいと思います。
セルフホストランナーの追加 - GitHub Docs

organizationで使えるランナーを追加するには、 まずhttps://github.com/organizations/{organization名}/settings/actionsAdd Runner をクリック。するとインストールするコマンドが出てくるので、それを実行すればOKです。簡単ですね。


インストールコマンドを実行するとこんな感じです。AAがいいですね。
途中でこのランナーにつける名前やラベルを聞かれますが、とりあえずは初期値でも大丈夫そうです。ランナーを複数登録する想定ならわかりやすいものをつけるとよさそうですね。

ちなみに、DockerイメージをAction上で使う場合はランナーマシンにDockerをインストールしておく必要があります。

インストール後、ランナーを起動するにはコマンドで起動する方法とサービスとして動かす方法があります。
コマンドの場合はランナーのパッケージ内の run.sh を実行するだけ。
サービスの場合は下ドキュメントにありますが

  • svc.sh でサービスを実行する
  • actions-runner/bin/actions.runner.service.template ファイルを編集して /etc/systemd/system/ あたりにうまいこと設置して systemctl でコントロールする
といった方法があります。
今回は後者の方法で、/etc/systemd/system/actions.service を設置しました。
[Unit]
Description=GitHub Actions Runner
After=network.target

[Service]
ExecStart=/usr/local/actions-runner/runsvc.sh
User=dev
WorkingDirectory=/usr/local/actions-runner
KillMode=process
KillSignal=SIGTERM
TimeoutStopSec=5min

[Install]
WantedBy=multi-user.target
セルフホストランナーアプリケーションをサービスとして設定する - GitHub Docs

インストールと起動がうまくいけば、このようにGitHubのページ上にも出てきます。


Actionsをセルフホストランナーで実行するには、ワークフローのyamlで以下のように書きます。
runs-on: [self-hosted, linux, x64]
同じOS&アーキテクチャのランナーが複数ある時はラベルをつければよさそうです。
ワークフローでのセルフホストランナーの利用 - GitHub Docs

このセルフホストランナー、今回やってみたようにサーバ上で常時稼働してもいいですが、ちょっとactionsを動かしていろいろデバッグとかしたいけど使用量の枠を食うのがやだなあ・・・というときにも便利そうですね。開発用マシンでその時だけランナーを動かすということもできるので。



なおセルフホストランナーですが、セキュリティ上の理由でパブリックリポジトリでは利用しないようにと公式ドキュメントに書かれています。
パブリックリポジトリではActionsが無料で使えるようなので、そちらでやればよさそうですね。