皆様こんにちは。SEの小池と申します。
今回のブログは、GitLab.comの共有Runner (SaaS Runners) に関する基本情報のまとめ記事 です。
本記事では、GitLab.comでSaaS Runnersの使用をご検討中の方への情報発信はもちろん、既にSaaS Runnersをお使いの方にも 2023/06/14 時点の最新情報をお伝えできればと存じます。
- 本記事の対象の方
- 今回のブログのゴール
- 事前ご連絡事項
- GitLab.comのSaaS Runnersとは?
- SaaS Runnersの基本的な仕組み
- SaaS Runnersの種類とマシンタイプ (2023/06/14時点)
- 特定のSaaS Runnerを明示的に使用する方法
- 料金プラン別におけるSaaS Runnersに関する利用制限 (2023/06/14時点)
- SaaS Runnersの使用状況の確認
- 最後に
本記事の対象の方
- 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の基本的な仕組みは以下の通りです。
- 各ジョブは、そのジョブ専用に新規でプロビジョニングされたVMで実行されます。
- プロビジョニングされたVMは、ジョブが完了し次第すぐに削除されます。したがって、仮にVMに何らかの変更を加えたとしても、その変更は後続のジョブでは利用できません。
- ジョブ実行のためにプロビジョニングされたVMには、sudo <パスワード> なしでアクセス可能です。
- プロビジョニングされたVMのストレージは、OS、プリインストールされたソフトウェアを含むイメージ、クローンリポジトリのコピーによって共有されます。よって実際にジョブで利用できるストレージ容量は、VMプロビジョニング時のストレージ容量とイコールではありません。
例えば以下のような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 runners、GPU runners、WindowsOS 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
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
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
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
バージョンタグ | ステータス |
---|---|
windows-1809 |
maintenance |
なお、2023/06/14時点でWindowsOS runnersはベータ版であり、本番環境のワークロードでWindowsOS runnersを利用することは非推奨となっているのでご注意ください。
macOS runners (ベータ版)
macOS runnersには1種類のマシンタイプが用意されています。
参考 : SaaS runners on macOS (Beta) | GitLab
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
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-job1 はtags
を設定していないので、デフォルトである LinuxOS runnersのマシンタイプ small で実行されます。
ジョブ build-job2 はtags
でsaas-linux-medium-amd64
と指定しているので、LinuxOS runnersのマシンタイプ medium で実行されます。
ジョブ build-job3 はtags
でsaas-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 における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
SaaS Runners | マシンタイプ | 料金プラン | ||
---|---|---|---|---|
Free | Premium | Ultimate | ||
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のRunnerで、種類とマシンタイプごとに設定されている係数です。
SaaS Runnersを利用する場合、GitLab.comにあるプロジェクトの公開範囲 (Public Project か Private Project か) を問わず 1 となります。
なお、GitLabのプロジェクトに貢献している場合 および GitLab for Open Source Program を適用している場合はこの限りではありません。
具体的な係数はこちらの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操作デモ動画 (基本編) を作ってみました。(音声の録音は自宅でiPhoneのボイスメモ使うという超低クオリティですが…。)
つたない内容ではありますが、ご興味がおありでしたら是非ご視聴いただければと存じます。