[GitHub]ActionsのホストランナーをEC2でやってみた
はじめに
GitHub ActionsのWorkflow利用可能時間枠は比較的多めだと思われますが、複数人で使う場合にはやはり上限が気になってきます。
利用枠を上限まで使い切ると動作が止まり、追加時間を購入することで再度動作可能となります。ただ、Workflow毎の実行ベース等読みにくい事も多々あり、足すべき枠の計算は困難だと思います。
Actionsはセルフホストの場合に利用可能時間枠の制限がありません。セルフホスト環境はクラウド環境でも可能です。利用時間が共有されないことと、使いすぎた分はAWS利用費で個々に跳ね返ってくるため分かりやすいこともあり、EC2でのセルフホスト設定を手順作成含めて試してみることにしました。
EC2インスタンスの設定
管理コンソール上で行っていきます。
Amazon Linuxの無料利用枠対象で問題ありません。
キーペアは新規作成にて「github_actions_runner_test」としておきます。ダウンロードしてインスタンスの作成にて完了です。
作成後に、EC2のパブリックDNSとセキュリティグループ名を控えておきます。
セキュリティグループ設定
SSH接続のために、セキュリティグループの更新を行います。
export publicdns=PUBLIC_DNS export groupname=SECURITY_GROUPNAME export groupid=$(aws ec2 describe-security-groups --group-names=$groupname | jq -r '.SecurityGroups[].GroupId') export selfcidr=$(curl ifconfig.moe) aws ec2 authorize-security-group-ingress --group-id $groupid --protocol tcp --port 22 --cidr ${selfcidr}/32 aws ec2 describe-security-groups --group-names=$groupname | jq -r ".SecurityGroups[].IpPermissions[].IpRanges[].CidrIp" echo "check: ${selfcidr}/32"
> % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15 100 15 0 0 405 0 --:--:-- --:--:-- --:--:-- 405 > % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15 100 15 0 0 384 0 --:--:-- --:--:-- --:--:-- 394 > 0.0.0.0/0 > XXX.XXX.XXX.XXX/32 > check: XXX.XXX.XXX.XXX/32
出力されるIPアドレスに、checkとして出力しているIPアドレスが含まれているか確認します。
GitHubホストランナーの設定
リポジトリのSettingsタブから、左側「Actions」を選択して、新規ホストランナー追加を行います。
インスタンスにログイン後、ポップアップに表示されたコマンドを実行していきます。途中求められる入力はそのままEnterで問題ありません。
% ssh ec2-user@$publicdns -i /path/to/github_actions_runner_test.pem The authenticity of host 'ec2-XXX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com (XXX.XXX.XXX.XXX)' can't be established. ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'ec2-XXX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com,XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/ % mkdir actions-runner && cd actions-runner % curl -O -L https://github.com/actions/runner/releases/download/v2.168.0/actions-runner-linux-x64-2.168.0.tar.gz % tar xzf ./actions-runner-linux-x64-2.168.0.tar.gz % ./config.sh --url http://github.com/USER/REPO_NAME --token XXXXXXXXXXXXXXXXXXXXX -------------------------------------------------------------------------------- | ____ _ _ _ _ _ _ _ _ | | / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ | | | | _| | __| |_| | | | | '_ \ / _ \ / __| __| |/ _ \| '_ \/ __| | | | |_| | | |_| _ | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ | | \____|_|\__|_| |_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ | | | | Self-hosted runner registration | | | -------------------------------------------------------------------------------- # Authentication √ Connected to GitHub # Runner Registration Enter the name of runner: [press Enter for ip-XXX-XXX-XXX-XXX] √ Runner successfully added √ Runner connection is good # Runner settings Enter name of work folder: [press Enter for _work] √ Settings Saved. % ./run.sh √ Connected to GitHub 2020-04-04 01:32:25Z: Listening for Jobs
ブラウザ上のホストランナー一覧にも追加されました。
Workflowを実施する
Workflowの動作環境指定を変更します。
jobs: comment: - runs-on: ubuntu-latest + runs-on: self-hosted
次にWorkflowが実行されるコミットを行います。
2020-04-04 01:32:25Z: Listening for Jobs 2020-04-04 01:38:08Z: Running job: comment 2020-04-04 01:38:18Z: Job comment completed with result: Failed
こけました。しかし何も分かりません。ブラウザからActionsのログを見てみます。
git checkout -b test origin/test >> /bin/sh: git: コマンドが見つかりません
どうやら詳細はブラウザ側を見ないと分からないようです。run.sh
を止めてgitを入れます。
% sudo yum -y install git % ./run.sh
そして再度コミットします。
2020-04-04 01:41:05Z: Listening for Jobs 2020-04-04 01:43:31Z: Running job: comment 2020-04-04 01:43:42Z: Job comment completed with result: Succeeded
上手くいったようです。
あとがき
ややこしい手順になるかと思っていましたが、予想外に手軽に出来ました。
ホストランナーには以下のようなメリットがあります。
- 標準のランナーに入っていないライブラリを入れやすい
- 実行環境のスペックを上げやすい
- 利用可能時間枠上限を気にしないで済む
virtual-environments/Ubuntu1804-README.md at master · actions/virtual-environments
利用費については
- t2.micro
- $0.0116 per hour
- ActionsのLinux環境超過枠
- $0.008 per minute ($0.48 per hour)
となります。プライベートリポジトリでの実行にて時間超過する事が判っていれば、長時間必要とするWorkflow向けにホストランナーでの設営を行うことでコストを抑えられる可能性があります。
コスト節約しつつの堅実なCICDを実施するための参考になれば幸いです。