2024年10月19日土曜日

terraform の nifcloud provider を使って Gitlab Runner を構築してみた

terraform の nifcloud provider を使って Gitlab Runner を構築してみた

概要

こちらを使ってみました

環境

  • Ubuntu 24.04
  • terraform 1.9.7
    • nifcloud provider 1.16

インストール

sudo apt update && sudo apt install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | \

gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null

gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint

echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list

sudo apt update
sudo apt install terraform

terraform -install-autocomplete

事前準備

Gitlab 側の任意のプロジェクトで Runner を登録する準備をしましょう
glrt- から始まるトークンが取得できれば OK です
このトークンは後述する variables.tf の token 変数として使われ環境変数から読み込みます

また今回は nifcloud を使うので nifcloud のアクセスキーとシークレットキーを準備しておいてください

main.tf

今回は3つのリソースを作成します

  • Runner 本体
  • Runner パラメータグループ
  • Runner と Gitlab の紐づけ

流れとして Runner 本体を作成後にパラメータグループを作成しそのパラメータグループを使って Runner と Gitlab を紐づけます

今回は紐づける Gitlab は https://gitlab.com をデフォルトの値にしています

resource "nifcloud_devops_runner" "test" {
  name              = var.runner_name
  instance_type     = var.instance_type
  availability_zone = var.az
  concurrent        = var.concurrent
  description       = var.description
}

resource "nifcloud_devops_runner_parameter_group" "test" {
  name = var.parameter_group_name
}

resource "nifcloud_devops_runner_registration" "group_runner" {
  runner_name          = var.runner_name
  gitlab_url           = var.gitlab_url
  parameter_group_name = var.parameter_group_name
  # 事前にgitlabからrunnerを登録するためのトークンを取得しておくこと
  token = var.token
}

variables.tf

変数を定義します
各種変数には default を用意していますが必要に応じて変更もしくは環境変数 TF_VAR_xxx から上書きしてもらって OK です

token は環境変数を使って挿入するので default はありません

variable "runner_name" {
  default = "test-runner"
  type    = string
}

variable "instance_type" {
  default = "c-small"
  type    = string
}

variable "az" {
  default = "east-11"
  type    = string
}

variable "concurrent" {
  default = 10
  type    = number
}

variable "description" {
  default = "memo"
  type    = string
}

variable "parameter_group_name" {
  default = "test-pg"
  type    = string
}

variable "gitlab_url" {
  default = "https://gitlab.com"
  type = string
}

variable "token" {
  type      = string
  sensitive = true
}

providers.tf

nifcloud プロバイダを使う定義を記載してるだけです
リージョンなど必要に応じて変更してください

terraform {
  required_providers {
    nifcloud = {
      source = "nifcloud/nifcloud"
    }
  }
}

provider "nifcloud" {
  region = "jp-east-1"
}

注意事項

自身 Gitlab と作成した Runner が疎通できていないといけないので一度実行して Runner を作成したあとに IP が払い出されるんのでその IP を Gitlab のファイアウォールに追加してあげてから再度 apply すれば Runner 登録も完了します

動作確認

  • terraform init
  • TF_VAR_token=glrt-xxx NIFCLOUD_ACCESS_KEY_ID=xxx NIFCLOUD_SECRET_ACCESS_KEY=xxx terraform plan
  • TF_VAR_token=glrt-xxx NIFCLOUD_ACCESS_KEY_ID=xxx NIFCLOUD_SECRET_ACCESS_KEY=xxx terraform apply

Gitlab 側から Runner が登録されていれば OK です

最後に

Runner トークンを払い出すのが面倒ですがそれもうまくいけば自動化できるかなと思います

現状は複数のトークンを指定することはできませんがうまくやれば count と組み合わせて一括登録的なこともできるかなと思います

参考サイト

0 件のコメント:

コメントを投稿