GitHub ActionsでRunnerを試す

Git
この記事は約10分で読めます。
記事内に広告が含まれています。

GitHub Actionsの実行環境(Runner)として自前のサーバを指定することが可能です。本記事では以下をご紹介していきます。

  • 任意リポジトリのRunnerとしてself-hostedを登録する。
  • Actionsはself-hostedで実行する。

以下、目次となります。

概要

公式サイトの概要は次の通りです。

セルフホステッド ランナーの概要 - GitHub Docs
独自のランナーをホストして、GitHub Actionsワークフロー中でジョブの実行に使われる環境をカスタマイズできます。

★ポイントは次の通りです。

  • 対象サーバにエージェントのインストールが必要です。
  • 対象サーバ → GitHub.comへの通信が必要です。
    ※ステートフルな通信設定であれば「アウトバンド」通信さえ許容していればOKです。

Runnerに登録する

リポジトリ管理者権限(Admin)であれば設定可能です。

Settings → Actions → Runners → New self-hosted runnerと進みます。

登録していきます。

エージェントのインストール手順等が表示されました。この手順に沿って作業を進めていきます。

※以下、手順抜粋(一部伏せてます)。

# Create a folder
mkdir actions-runner && cd actions-runner

# Download the latest runner package
curl -o actions-runner-linux-x64-2.304.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.304.0/actions-runner-linux-x64-2.304.0.tar.gz

# Optional: Validate the hash
echo "292e8770bdeafca135c2c06cd5426f9dda49a775568f45fcc25cc2b576afc12f  actions-runner-linux-x64-2.304.0.tar.gz" | shasum -a 256 -c

# Extract the installer
tar xzf ./actions-runner-linux-x64-2.304.0.tar.gz

# Create the runner and start the configuration experience
./config.sh --url https://github.com/xxxxx --token A7535LL4FAVxxxxxxxxxxxxxxxxxx

# Last step, run it!
./run.sh

ところで今回のRunnerは、AWSのAmazon Linux2を対象としました。

※標準で「shasum」は入っていないため必要なら「yum install -y perl-Digest-SHA」でインストール可能でした。

プロキシは・・・?

必要に応じて設定しよう。

例えば「/etc/prifile」にプロキシサーバのURLを指定すればRunnerエージェントはちゃんと見てくれました。

# 必要なら「/etc/profile」に以下を追記 (proxy,portは適宜置換)
export http_proxy="http://proxy:port/"
export https_proxy="https://proxy:port/"

以下、エージェントダウンロード~実行までのログです(うまくいきました)。

[ec2-user@ip-X-X-X-X ~]$ mkdir actions-runner && cd actions-runner
[ec2-user@ip-X-X-X-X actions-runner]$ curl -o actions-runner-linux-x64-2.304.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.304.0/actions-runner-linux-x64-2.304.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  137M  100  137M    0     0  1867k      0  0:01:15  0:01:15 --:--:-- 2282k
[ec2-user@ip-X-X-X-X actions-runner]$ echo "292e8770bdeafca135c2c06cd5426f9dda49a775568f45fcc25cc2b576afc12f  actions-runner-linux-x64-2.304.0.tar.gz" | shasum -a 256 -c
actions-runner-linux-x64-2.304.0.tar.gz: OK
[ec2-user@ip-X-X-X-X actions-runner]$ tar xzf ./actions-runner-linux-x64-2.304.0.tar.gz
[ec2-user@ip-X-X-X-X actions-runner]$ ./config.sh --url https://github.com/XXXX --token A7535LL4FAV6XXXXXXXXX

--------------------------------------------------------------------------------
|        ____ _ _   _   _       _          _        _   _                      |
|       / ___(_) |_| | | |_   _| |__      / \   ___| |_(_) ___  _ __  ___      |
|      | |  _| | __| |_| | | | | '_ \    / _ \ / __| __| |/ _ \| '_ \/ __|     |
|      | |_| | | |_|  _  | |_| | |_) |  / ___ \ (__| |_| | (_) | | | \__ \     |
|       \____|_|\__|_| |_|\__,_|_.__/  /_/   \_\___|\__|_|\___/|_| |_|___/     |
|                                                                              |
|                       Self-hosted runner registration                        |
|                                                                              |
--------------------------------------------------------------------------------

# Authentication

Using V2 flow: False

√ Connected to GitHub

# Runner Registration

Enter the name of the runner group to add this runner to: [press Enter for Default]

Enter the name of runner: [press Enter for ip-X-X-X-X] ABC

This runner will have the following labels: 'self-hosted', 'Linux', 'X64'
Enter any additional labels (ex. label-1,label-2): [press Enter to skip]

√ Runner successfully added
√ Runner connection is good

# Runner settings

Enter name of work folder: [press Enter for _work]

√ Settings Saved.

[ec2-user@ip-X-X-X-X actions-runner]$ ./run.sh

√ Connected to GitHub

Current runner version: '2.304.0'
2023-06-02 02:11:29Z: Listening for Jobs

ジョブ待機中です。

うまく通信出来たようです。

早速、GitHub側のRunnersを見ると、ホストが認識されていました。

登録されてました。

以下、補足事項です。

  • 最初、rootで実行しようとしたら「Must not run with sudo」と怒られました。ここでは、Amazon Linux2のデフォルトユーザ「ec2-user」で試してました。
  • エージェントが動作していない場合は「OFFLINE」となります。ジョブ実行中は「Active」でした。
  • run.shを停止するとエージェントは終了します。同梱されたsvc.shを使えばサービスとして登録することが出来、その場合はバックグラウンドに常駐します。
    ※ただし、プロキシ経由で疎通出来なかったため、サービスファイルに直接「Environment=”HTTP_PROXY=http://proxy:port”」等を記載して回避しました。

Actionsを動かす

早速、Actionsを先ほど登録したRunner(自前ホスト)で動作させてみます。

Actionsの設定ファイルは次の通りです。

name: self-hosted-test
on: 
  push: 
    branches: [ "main" ]
jobs:
  hello:
    runs-on: [self-hosted]
    steps:
      - uses: actions/checkout@v3
      - run: pwd
      - run: ls -l
      - run: python main.py
  • リポジトリ内には「main.py」ファイルがあって、中身は「print(“hello world”)」です。
  • steps配下ではリポジトリ内容をチェックアウトして、pythonを実行します(pwd等はお試しで記載した内容で特に意味はないです)。

この状態でmainブランチに何かしらファイルをpushすると動作します。以下がサーバのコンソールログです(サービス常駐の場合は別途ログ出力されます)。

2023-06-06 02:22:48Z: Running job: hello
2023-06-06 02:22:59Z: Job hello completed with result: Succeeded

GitHub上のAction結果は次の通りでした。

Pythonが実行され「hello world」が出力されています!


ところで、タグの指定を変更すれば、ブランチ毎に違うランナーで動かすことも出来ます(振り分けることが出来る)。

runs-on: [self-hosted, label1]

Actionsはこの条件に一致したRunnerで実行されます。

その他

◇公式サイトからの抜粋となりますが、使用状況の制限は次の通りです。

  • 最大実行時間は35日です。
  • キューの有効時間は24時間です。
    → 実行中の時に再Actionsが発生するとキューに登録されます。実行中のジョブが終わらないとキャンセルされるということ。
  • API実行数は1時間で1000まで。

など。

◇コスト比較

コンピュータの実行時間だけ比較すれば自前のほうがだいぶ安いです(ストレージ等は含まない)。
→ 例えばActionsにおける2コア1時間の料金は「0.008*60=0.48$」。EC2@t3.mediumの場合は「0.054$」。

まとめ

本記事ではActions@Runner(自前ホスト)を試した際の内容を整理してお届けしました。

  • 疎通は簡単でした。
  • 自前のビルド資産等があれば選択肢になりえます。

最後までご覧いただきありがとうございました。

コメント

Top
タイトルとURLをコピーしました