株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

GitLab.comの共有Runner (SaaS Runners) に関する基本情報まとめ

皆様こんにちは。SEの小池と申します。

今回のブログは、GitLab.comの共有Runner (SaaS Runners) に関する基本情報のまとめ記事 です。

本記事では、GitLab.comでSaaS Runnersの使用をご検討中の方への情報発信はもちろん、既にSaaS Runnersをお使いの方にも 2023/06/14 時点の最新情報をお伝えできればと存じます。

本記事の対象の方

  • GitLab.comのSaaS Runnersをご利用中の方。
  • GitLab.comのSaaS Runnersの利用をご検討中の方。
  • GitLab.comのSaaS Runnersについて、情報収集中の方。

今回のブログのゴール

このブログのゴールはこちらです。


今回のゴール
  • GitLab.comのSaaS Runnersに関する基本的な情報を得る。
  • キーワード tags を指定することで、特定のSaaS Runnersを使う方法を理解する。
  • 料金プランによるSaaS Runnersの利用制限を把握する。

事前ご連絡事項

  • 本記事はSaaS版 (GitLab.com) の Enterprise Edition 16.1.0-pre における仕様をベースに記載しております。それ以外のエディションやバージョンではこの記事に記載の通りではない可能性がございます。
  • 本記事の操作説明と画面ショットはGitLabのローカライズを日本語にした状態で説明しております。それ以外の言語をご利用の方は適宜読み替えてください。
  • 本記事で言及しているSaaS Runnersに関する情報は、2023/06/14時点の情報です。最新の情報についてはGitLab DocsのSaaS Runnersセクション (こちら) をご参照ください。
  • 本記事に掲載されている情報は正確性・安全性を保証するものではありません。本記事の情報を利用することによって発生した損失や損害については、一切の責任を負いかねます。

GitLab.comのSaaS Runnersとは?

SaaS Runnersとは、GitLabのSaaS版であるGitLab.comにおける共用Runner (Shared runners) のことを指します。

GitLab.com環境にて常時利用できる状態になっているため、自前でRunnerを用意せずともSaaS Runnersを使ってCI/CDパイプラインを実行することが可能です。

SaaS Runnersの基本的な仕組み

GitLab Docsによると、SaaS Runnersの基本的な仕組みは以下の通りです。

SaaS Runnersの基本的な仕組み
  • 各ジョブは、そのジョブ専用に新規でプロビジョニングされたVMで実行されます。
  • プロビジョニングされたVMは、ジョブが完了し次第すぐに削除されます。したがって、仮にVMに何らかの変更を加えたとしても、その変更は後続のジョブでは利用できません。
  • ジョブ実行のためにプロビジョニングされたVMには、sudo <パスワード> なしでアクセス可能です。
  • プロビジョニングされたVMのストレージは、OS、プリインストールされたソフトウェアを含むイメージ、クローンリポジトリのコピーによって共有されます。よって実際にジョブで利用できるストレージ容量は、VMプロビジョニング時のストレージ容量とイコールではありません。
参考 : Runner SaaS | GitLab

例えば以下のようなCI/CDパイプラインがあったとします。

このCI/CDパイプラインをSaaS Runnersで実行した場合、ジョブ buildjob, testjob1, testjob2, deployjob1 は実行時にそれぞれ新規VMがプロビジョニングされ、そのVMでジョブが実行されます。

なお、使用したSaaS RunnersがLinuxOS runners (GPU runnersを含む) だった場合、ジョブ実行時に新規でVMがプロビジョニングされ、そのVMの中でコンテナが起動し、そのコンテナでジョブが実行されます。

SaaS Runnersの種類とマシンタイプ (2023/06/14時点)

SaaS Runnersには、LinuxOS runnersGPU runnersWindowsOS runners (ベータ版) そして macOS runners (ベータ版) があります。
(これらのSaaS runnersのうち、一部は有償プラン (Premium) 以上でのみ利用可能です。料金プランによる制限事項については後述の料金プラン別におけるSaaS Runnersに関する利用制限 をご参照ください。)

ご注意ください : 本章の内容について
本章は2023/06/14時点の情報を記載しております。2023/06/14以降にリリースされた新機能や変更された仕様について、本章では触れておりません。
最新の情報についてはメーカーの公式ドキュメントをご参照ください。

SaaS Runnersに関するGitLab Docs : Runner SaaS | GitLab

LinuxOS runners

LinuxOS runnersには small, medium, largeの3種類のマシンタイプが用意されています。
参考 : SaaS runners on Linux | GitLab

表1. LinuxOS runnersのマシンタイプ
Runnerタグ マシンタイプ vCPUs Memory Storage
saas-linux-small-amd64 small 2 8GB 25GB
saas-linux-medium-amd64 medium 4 16GB 50GB
saas-linux-large-amd64 large 8 32GB 100GB

なお、マシンタイプを問わず、LinuxOS runnersのエクゼキューターは docker+machine です。.gitlab-ci.ymlにてジョブで使用するイメージ名を明示的に指定していない場合、デフォルトでruby:3.1が使用されます。
参考 : SaaS runners on Linux - Container images | GitLab

GPU runners

GPU runnersは Linux OS のみ対応していて、マシンタイプは1種類提供されています。
参考 : GPU-enabled SaaS runners | GitLab

表2. GPU runnersのマシンタイプ
Runnerタグ vCPUs Memory Storage GPU
saas-linux-medium-amd64-gpu-standard 4 16GB 50GB 1 Nvidia Tesla T4 GPU
(または同等のもの)

エクゼキューターは docker+machine です。
GPU runnersを使用する場合の注意点として、ジョブ実行に使用するイメージにGPUドライバーが含まれている必要があります。
参考 : GPU-enabled SaaS runners - Container images with GPU drivers | GitLab

例えば以下のような.gitlab-ci.ymlがあり、これに含まれるジョブ gpu-samplejob1 と ジョブ gpu-samplejob2 を両方ともGPU runnersで実行したいとします。
この場合、ジョブ gpu-samplejob1 はキーワードimageでGPUドライバーが含まれるコンテナイメージを指定しているので、正常に完了します。
ジョブ gpu-samplejob2 はキーワードimageが指定されていないため、LinuxOS runnersのデフォルトイメージであるruby:3.1で実行されます。しかし、コンテナイメージruby:3.1にはGPUドライバーが含まれていないため、結果としてジョブ gpu-samplejob2 は異常終了します。

gpu-samplejob1:    # こちらのジョブは正常終了します。
  stage: build
  tags:
    - saas-linux-medium-amd64-gpu-standard
  image: nvcr.io/nvidia/cuda:12.1.1-base-ubuntu22.04
  script:
    - apt-get update
    - apt-get install -y python3.10
    - python3.10 --version

gpu-samplejob2:    # こちらのジョブは異常終了します。
  stage: build
  tags:
    - saas-linux-medium-amd64-gpu-standard
  script:
    - apt-get update
    - apt-get install -y python3.10
    - python3.10 --version

WindowsOS runners (ベータ版)

WindowsOS runnersには1種類のマシンタイプが用意されています。
参考 : SaaS runners on Windows (Beta) | GitLab

表3. WindowsOS runnersのマシンタイプ
Runnerタグ vCPUs Memory Storage
shared-windows 2 7.5GB 75GB

WindowsOS runnersのエクゼキューターは、Dockerではなく custom executor を使用しています。 このため、.gitlab-ci.ymlにおいて、ジョブを実行するコンテナイメージを指定できません。

イメージ指定の代わりに、WindowsOSのバージョンを指定するタグが存在します。ただ、2023/06/14現在、WindowsOSのバージョンを指定するタグは1つのみです。
参考 : SaaS runners on Windows (Beta) - Supported Windows versions | GitLab

表4. WindowsOS runnersにおいて、WindowsOSのバージョンを指定するタグ
バージョンタグ ステータス
windows-1809
maintenance

なお、2023/06/14時点でWindowsOS runnersはベータ版であり、本番環境のワークロードでWindowsOS runnersを利用することは非推奨となっているのでご注意ください。

macOS runners (ベータ版)

macOS runnersには1種類のマシンタイプが用意されています。
参考 : SaaS runners on macOS (Beta) | GitLab

表5. macOS runnersのマシンタイプ
Runnerタグ マシンタイプ vCPUs Memory Storage
saas-macos-medium-m1 medium 4 8GB 25GB

macOS runnersは、macOS用のVMのイメージセットを提供します。このため、.gitlab-ci.ymlにおいて、ジョブを実行するコンテナイメージを指定できません。

提供されているmacOSのイメージは以下の通りです。これらの内、使用したいイメージを.gitlab-ci.ymlのキーワードimageに指定します。(キーワードtagesに指定しないようにご注意ください。)
参考 : SaaS runners on macOS (Beta) - Supported macOS images | GitLab

表6. macOS runnersで提供されるVMイメージ
VMイメージ ステータス
macos-12-xcode-13 maintenance
macos-12-xcode-14 maintenance
(none, awaiting macOS 13) beta

特定のSaaS Runnerを明示的に使用する方法

CI/CDパイプラインのジョブを実行するSaaS Runnersを明示的に指定したい場合は、ジョブの設定でキーワード tags を使いますtagsに指定する文字列は、前章をご参照いただくか、GitLab DocsのSaaS Runnersのページをご参照ください。
参考 : `.gitlab-ci.yml` keyword reference - tags | GitLab

以下の.gitlab-ci.ymlは、各ジョブでLinuxOS runnersのマシンタイプを使い分けている例です。

build-job1:    # このジョブはマシンサイズ small で実行されます。
  stage: build
  script:
    - echo "これはジョブ build-job1 です。"

build-job2:    # このジョブはマシンサイズ medium で実行されます。
  stage: build
  tags:
    - saas-linux-medium-amd64
  script:
    - echo "これはジョブ build-job2 です。"

build-job3:    # このジョブはマシンサイズ large で実行されます。
  stage: build
  tags:
    - saas-linux-large-amd64
  script:
    - echo "これはジョブ build-job3 です。"

ジョブ build-job1tagsを設定していないので、デフォルトである LinuxOS runnersのマシンタイプ small で実行されます。
ジョブ build-job2tagssaas-linux-medium-amd64と指定しているので、LinuxOS runnersのマシンタイプ medium で実行されます。
ジョブ build-job3tagssaas-linux-large-amd64と指定しているので、LinuxOS runnersのマシンタイプ large で実行されます。

以下の.gitlab-ci.ymlは、WindowsOS runnersを使用する例です。

build-job1:    # このジョブはWindowsOS runners の バージョン1809 で実行されます。
  stage: build
  tags:
    - shared-windows
    - windows-1809
  script:
    - echo "これはジョブ build-job1 です。"

上の例ではtagesには2つの設定値が存在します。
shared-windowsはWindowsOS runnersを使用することを指定しています。
windows-1809はジョブ実行で使用するWindowsのバージョンを指定しています。

以下の.gitlab-ci.ymlは、macOS runnersを使用する例です。

build-job1:    # このジョブはmacOS runnersを用いて、macOS 12 (xcode:13) で実行されます。
  stage: build
  tags:
    - saas-macos-medium-m1
  image: macos-12-xcode-13
  script:
    - echo "これはジョブ build-job1 です。"

build-job2:    # このジョブはmacOS runnersを用いて、macOS 12 (xcode:14) で実行されます。
  stage: build
  tags:
    - saas-macos-medium-m1
  image: macos-12-xcode-14
  script:
    - echo "これはジョブ build-job2 です。"

上のCI/CDパイプラインには2つのジョブがあり、両方ともtagesでmacOS runnersを使用することを設定し、imageで使用するmacOS イメージを指定しています。
上記の例だと、ジョブ build-job1 はmacOS 12 (xcode:13) で実行され、ジョブ build-job2 はmacOS 12 (xcode:14) で実行されます。

料金プラン別におけるSaaS Runnersに関する利用制限 (2023/06/14時点)

GitLab.comのSaaS Runnersは、料金プランによって 使用可能なRunnerの種類1ヶ月に使用可能なコンピューティングユニットの上限 が異なります

ご注意ください : 本章の内容について
本章は2023/06/14時点の情報を記載しております。2023/06/14以降にリリースされた新機能や変更された仕様について、本章では触れておりません。
最新の情報についてはメーカーの公式ドキュメントをご参照ください。

SaaS Runnersに関するGitLab Docs : Runner SaaS | GitLab

ご注意ください : GitLab for Open Source Program について
本章では、オープンソース開発者向けの特別なプランである GitLab for Open Source Program については言及しておりません。GitLab for Open Source Program におけるSaaS Runnersの使用に関する制限事項については、メーカーの公式情報をご確認ください。

GitLab for Open Source Program について : GitLab for Open Source | GitLab

【料金プラン別】使用可能なRunnerの種類

Freeプランの場合、利用可能なSaaS Runnersは LinuxOS runners のマシンタイプ small と、WindowsOS runners (ベータ版) のみです。
他のOSのSaaS Runners および LinuxOS runners のマシンタイプ medium と large は、Premium以上のプランで利用可能です。
参考 : Runner SaaS | GitLab

表7. 【料金プラン別】使用可能なSaaS Runners
SaaS Runners マシンタイプ 料金プラン
FreePremiumUltimate
LinuxOS runners small
medium
-
large
-
GPU runners medium
-
WindowsOS runners
-
macOS runners medium
-

【料金プラン別】1ヶ月に使用可能なコンピューティングユニット

1ヶ月に、Freeプランの場合は 400、Premiumプランの場合は 10,000、Ultimateプランの場合は 50,000 コンピューティングユニットの上限があります
参考 : Pricing | GitLab

"コンピューティングユニット" とは、GitLabのSaaS Runnersの使用状況の指標であり、以下の式で算出されます。

ジョブ実行にかかかった時間 × コスト係数
  • ジョブ実行にかかった時間
  • SaaS Runnersを使ったジョブの実行にかかった時間 (秒) 。ただし、ステータスが created または pending 状態だった時間は含まれません。
  • コスト係数
  • コスト要因 (CI/CDパイプラインを実行したプロジェクトの場所と公開状況) と 追加コスト要因 (使用したRunnersのマシンタイプ) が影響する係数。
    • コスト要因
    • CI/CDパイプラインを実行したプロジェクトがある場所と、その公開状況が関連する係数です。
      SaaS Runnersを利用する場合、GitLab.comにあるプロジェクトの公開範囲 (Public Project か Private Project か) を問わず 1 となります。
      なお、GitLabのプロジェクトに貢献している場合 および GitLab for Open Source Program を適用している場合はこの限りではありません。
    • 追加コスト要因
    • SaaS RunnersのRunnerで、種類とマシンタイプごとに設定されている係数です。
      具体的な係数はこちらのGitLab Docsをご参照ください。

参考 : Compute quota - How compute usage is calculated | GitLab

SaaS Runnersの使用状況の確認

GitLab.comにおいて、対象のルートグループの [設定] > [割当使用率] > [パイプライン] タブを開くと、当月を含む直近6ヵ月における SaaS Runners の利用状況 (使用したコンピューティングユニット) を確認できます。
(ルートグループに対してロール owner を持っているユーザーであることが必須です。)

最後に

この度はGitもCI/CDもよくわかっていないど素人SEによるGitLab検証ブログをお読みいただき、誠にありがとうございます。
このブログの目標は以下のとおりでしたが、皆さまはいかがでしたでしょうか。


今回のゴール
  • GitLab.comのSaaS Runnersに関する基本的な情報を得る。
  • キーワード tags を指定することで、特定のSaaS Runnersを使う方法を理解する。
  • 料金プランによるSaaS Runnersの利用制限を把握する。

GitLab.comをご検討中の方であれば、SaaS Runnersの仕様や料金体系などは気になる点かと存じます。
今回はそんな方々にむけて、少しでもGitLab.comのSaaS Runnersについて簡潔にまとめた情報をご提供できればと思い、頑張って調べながら記事を書きました。

最近GitLabはSaaS Runnersの拡充に力を入れていらっしゃるようで、16.0 にてmacOSのRunner (ベータ版) とGPUのRunnerが追加される等、どんどん充実してきています。
今後、様々なSaaS Runnersが追加されることを筆者も期待しています。

この記事がGitLabを触り始めた方の一助となれば幸いにございます。


GitLabに関するお問い合わせは、以下のフォームからお願い致します。
GitLab製品 お問い合わせ

今までのGitLabの検証ブログはこちらです。
GitLab カテゴリーの記事一覧 - ネットワールド らぼ

GitLab操作デモ動画 (基本編) を作ってみました。(音声の録音は自宅でiPhoneのボイスメモ使うという超低クオリティですが…。)
つたない内容ではありますが、ご興味がおありでしたら是非ご視聴いただければと存じます。

www.youtube.com