LoginSignup
14
5

More than 1 year has passed since last update.

GitHub Actionsのセルフホステッドランナーを構築する

Last updated at Posted at 2023-04-09

使用技術

GitHub Actions

GitHubホステッドランナー

セルフホステッドランナー

  • 自身でサーバを用意してセットアップする方式
  • 以下のような条件に当てはまる場合に選定されることが多い
    • GitHub Enterpriseを使用する場合
    • GitHubホステッドランナーでは社内のセキュリティ要件を満たせない場合
    • CI/CDの実行に高いスペックのサーバが必要
    • ニッチなOS上でCI/CDを実行したい場合
    • CI/CDの実行にかかる費用を抑えたい場合
  • ドキュメント: セルフホステッド ランナーの概要

セルフホステッドランナーの構築

必要な情報の確認

  • GitHub上に適当なリポジトリを作成する
  • Settings > Actions > Runners に移動
  • 「New self-hosted runner」を押下

  • 今回セルフホステッドランナーを構築するサーバのアーキテクチャはx64で、OSはUbuntu Server 22.04 LTS
  • そのため、「Runner image」はLinux、「Architecture」はx64を選択する

  • 「Download」からダウンロード先を控えておく

  • 「Configure」から--url--tokenを控えておく

ランナーのダウンロード

# rootユーザにスイッチ
$ sudo su -

# ダウンロード先となるディレクトリの作成
$ mkdir /opt/actions-runner && cd /opt/actions-runner

# 先ほど控えたダウンロード先からダウンロード
$ curl -o actions-runner-linux-x64-2.303.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.303.0/actions-runner-linux-x64-2.303.0.tar.gz

# ハッシュ値の検証
$ echo "e4a9fb7269c1a156eb5d5369232d0cd62e06bec2fd2b321600e85ac914a9cc73  actions-runner-linux-x64-2.303.0.tar.gz" | shasum -a 256 -c
actions-runner-linux-x64-2.303.0.tar.gz: OK

# tarballの解凍
$ tar xzf ./actions-runner-linux-x64-2.303.0.tar.gz

ランナーの設定

# runnerユーザの作成
# ランナーの実行ユーザとして使用する
$ useradd runner -m

# パスワード無しでsudoコマンドを実行できるようにしておく
$ echo "runner ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/runner

# カレントディレクトリ以下のファイルの所有者とグループを再帰的にrunnerに変更
$ chown runner:runner . -R

# ランナーの設定
# --urlと--tokenには先ほど控えておいたものを指定する
# --unattendedはインタラクティブモードを無効化するオプション
# --replaceは既存のランナーを上書きして登録するオプション
# --nameはランナーの名称を指定するオプション
$ sudo -u runner ./config.sh --url https://github.com/tyokinuhata/XXXXXXXX --token XXXXXXXX --unattended --replace --name foo-runner

# ランナーのインストール
# runnerユーザとしてランナーが実行されるようにしておく
$ ./svc.sh install runner

# ランナーの実行
$ ./svc.sh start

ランナーの確認

  • サーバ上で確認する場合
# ランナーのステータス確認
$ ./svc.sh status
  • GitHub上で確認する場合は Settings > Actions > Runners を開く

  • ランナーが正常に実行できており、ネットワークの疎通も取れている場合、「Status」はIdleになっている
  • ランナーが正常に実行できていないか、ネットワークの疎通に問題がある場合、「Status」はOfflineになっている
  • ランナーがワークフローを実行中の場合、「Status」はActiveになる

ワークフローの実行

  • 作成したリポジトリの.github/workflows/以下に適当なワークフローを定義する
  • 以下のサンプルはgit push時にhello, world!をコンソール上に出力する設定
.github/workflows/sample.yml
name: Sample
on:
  - push
jobs:
  echo:
    runs-on: ubuntu-latest
    steps:
      - name: Hello world
        run: echo hello, world!
  • その後、GitHub上にgit pushするとワークフローが実行される
  • 実行過程やステータスは Actions > <ワークフロー名> > <該当コミット> > Jobs > <ジョブ名> から確認できる

ログの確認

# サービス名の確認
$ cat /opt/actions-runner/.service
actions.runner.tyokinuhata-XXXXXXXX.foo-runner.service

# ログの確認
$ sudo journalctl -u actions.runner.tyokinuhata-XXXXXXXX.foo-runner.service

ヘルプの確認

# config.shのその他のオプションは以下のコマンドで確認できる
$ sudo -u runner ./config.sh --help

# svc.shのその他のサブコマンドは以下のコマンドで確認できる
$ ./svc.sh --help

config.shに変更を加えたい場合

# ランナーのアンインストール
$ ./svc.sh uninstall

# 設定の削除
# トークンの入力を求められるため、 Settings > Actions > Runners に移動し、「New self-hosted runner」を押下後、「Configure」からトークンを取得する
$ sudo -u runner ./config.sh remove

# ランナーの設定
# 今回は--nameをfoo-runnerからbar-runnerに変更した
$ sudo -u runner ./config.sh --url https://github.com/tyokinuhata/XXXXXXXX --token XXXXXXXX --unattended --replace --name bar-runner

# ランナーのインストール
$ ./svc.sh install runner

# ランナーの実行
$ ./svc.sh start

# サービス名が変更された
$ cat /opt/actions-runner/.service
actions.runner.tyokinuhata-XXXXXXXX.bar-runner.service
  • GitHub上でも Settings > Actions > Runners を開くと、ランナーの名前がbar-runnerに変更されたことが分かる

14
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
5