Closed17

terraform-aws-github-runner を試してみる

odanodan

Setup GitHub App (part 1)

よしなに設定をする

Webhook は後で設定するので一旦 Disable にする

権限周りはこんな感じ

odanodan

名前が被ってるとかで github-runner-for-odan に変更した

odanodan

prefix に制限があるらしい...

terraform-aws-github-runner-for-odan にする

odanodan

Service-linked role

スポットインスタンスを作成するには AWSServiceRoleForEC2Spot ロールを AWS のアカウントに設定する必要があるらしい
この設定はアカウントごとにグローバルなやつなので、terraform で管理するか手動でやるか悩ましい

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#service-linked-roles-spot-instance-requests に従って awscli で許可する

 AWS_PROFILE=root aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
odanodan

Terraform module

key_base64base64 self-hosted-runner-for-odan.2022-05-22.private-key.pem の結果を貼る

とりあえず、https://github.com/philips-labs/terraform-aws-github-runner/blob/develop/examples/default/main.tf をコピペしてくる

locals {
  version     = "v1.2.0"
  environment = "default"
  aws_region  = "ap-northeast-1"
}

provider "aws" {
  region = "ap-northeast-1"
}

variable "github_app_key_base64" {}
variable "github_app_id" {}

resource "random_id" "random" {
  byte_length = 20
}

data "aws_caller_identity" "current" {}

module "runners" {
  source  = "philips-labs/github-runner/aws"
  version = "1.2.0"

  create_service_linked_role_spot = true
  aws_region                      = local.aws_region
  vpc_id                          = module.vpc.vpc_id
  subnet_ids                      = module.vpc.private_subnets

  prefix = local.environment
  tags = {
    Project = "ProjectX"
  }

  github_app = {
    key_base64     = var.github_app_key_base64
    id             = var.github_app_id
    webhook_secret = random_id.random.hex
  }

  webhook_lambda_zip                = "webhook.zip"
  runner_binaries_syncer_lambda_zip = "runner-binaries-syncer.zip"
  runners_lambda_zip                = "runners.zip"


  enable_organization_runners = false
  runner_extra_labels         = "default,example"

  # enable access to the runners via SSM
  enable_ssm_on_runners = true

  instance_types = ["t3.small"]

  # override delay of events in seconds
  delay_webhook_event   = 5
  runners_maximum_count = 1

  # set up a fifo queue to remain order
  fifo_build_queue = true

  # override scaling down
  scale_down_schedule_expression = "cron(* * * * ? *)"
}

apply すると webhook の URL とシークレットが払い出されるので、GitHub Apps の設定に入力する

odanodan

先に GitHub Apps をインストールしていたためか

In the "Permissions & Events" section and then "Subscribe to Events" subsection, check either "Workflow Job" or "Check Run" (choose only 1 option!!!).

をやってもイベントが発火しなかった

GitHub Apps をリポジトリに uninstall => install したら動くようになった

odanodan

動かしてみたけど Lambda で TypeError Cannot read property 'full_name' of undefined というエラーが発生する

odanodan

と、思ったけどその後の Webhook でいい感じに動いてた。なぞ

odanodan

workflow ファイルはこんな感じ

name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  workflow_dispatch:

jobs:
  build:
    runs-on: [self-hosted, example]
    steps:
      - uses: actions/checkout@v3

      - name: Run a one-line script
        run: echo Hello, world!

runner_extra_labels に指定した値を runs-on に指定する

このスクラップは2022/09/03にクローズされました