1月15日開催!現年収非公開で企業からスカウトをもらってみませんか?PR

転職ドラフトでリアルな市場価値を測る。レジュメをもとに、企業から年収とミッションが提示されます。

14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

GitHub Actionsのワークフローを使用する際に全社共有のRunnerを利用されてはいないでしょうか?
その際に、大多数の方がRunnerを利用されるため処理が遅くなる現象に遭遇したことが一度はあるかと思います。
今回はそのような事象への解決策として、GitHub ActionsのSelf-Hosted RunnerをAWS EC2に構築できるCFnテンプレートを作成しました。

概要

作成したCFnテンプレートですが、以下のような2部構成になっています。

  • GitHubActions-selfhosted-runner-NW
    • ネットワーク周辺等リソースを作成する
  • GitHubActions-selfhosted-runner-EC2
    • Runnerを置くためのEC2

今回は、GitHubActions-selfhosted-runner-EC2のテンプレートにRunnerを起動するためのスクリプトをどのように組み込んだのかご紹介したいと思います。

ご紹介するCFnテンプレートですが、作成途中のため完全体ではありません。本記事執筆のため、起動したのですが失敗してました、、、苦笑

Self-Hosted Runnerのメリット

  • 共有Runnerの他の利用者の負荷を気にしなくても良い
  • Runnerが止まることなく、負荷のかかる処理を行うことが可能
  • 特定の環境に最適化したビルドやテストを行うことが可能

登場する技術たち

組み込み手順

  • Runnerを起動するスクリプトを取得する
    • Runnerを作成したいリポジトリを選択する
    • Settings > Actions > Runners > New self-hosted runner
      (以下の画像を参照)

image.png

  • 上記の画像のスクリプトのうち"Download"と"Configure"の箇所を用いて、EC2のUserDataにスクリプトを記述する

*追加の記述もあるが、そちらは後ほど説明

実際に組み込んだスクリプト

template_EC2.yml (一部抜粋)
EC2Instance:
    UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          set -ex

          # Update and install prerequisites
          sudo apt-get update
          sudo apt-get install -y curl tar

          # assign a user for Ubuntu
          su - ubuntu -c "

          # Create a folder for the runner
          mkdir -p /home/ubuntu/actions-runner
          cd /home/ubuntu/actions-runner

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

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

          # Configure the runner
          ./config.sh --url ${GitHubRepoURL} --token ${GitHubRunnersToken} --labels ${GitHubRunnersLabels} --name ${GitHubRunnersName}

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

          # Ensure the runner starts on reboot
          crontab -l > mycron || true
          echo '@reboot cd /home/ubuntu/actions-runner && ./run.sh &' >> mycron
          crontab mycron
          rm mycron
          "
          
  • こちらはRunnerをインストールするための前提条件の更新とユーザの切り替えのための記述です (今回はUbuntuを使用しています)👇
      # Update and install prerequisites
          sudo apt-get update
          sudo apt-get install -y curl tar

          # assign a user for Ubuntu
          su - ubuntu -c "
  • こちらはRunnerがシステム起動時に自動で起動するためのものです👇
      # Ensure the runner starts on reboot
          crontab -l > mycron || true
          echo '@reboot cd /home/ubuntu/actions-runner && ./run.sh &' >> mycron
          crontab mycron
          rm mycron
          "

実際に起動してみた

実際に作成したテンプレートで起動してみましたが、今回はうまくいきませんでした、、、泣
EC2のシステムログ上には起動しているように見えるのですが、、、👇
image.png

まとめ

今回は失敗に終わりましたが、テンプレートを改良して開発プロセスの向上に貢献できたらと思います👍
今後はAutoScalngの機能を盛り込むなど更なるバージョンアップに励んでいきたいと思います!

14
0
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

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?