この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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を実施するための参考になれば幸いです。