ワークスペースの設定
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
ワークスペースを使用すると、GitLabプロジェクト用に分離された開発環境を作成および管理できます。各ワークスペースは、独自の依存関係、ライブラリ、ツールで構成され、各プロジェクトの特定のニーズに合わせてカスタマイズできます。
ワークスペースのインフラストラクチャをセットアップする
ワークスペースを作成する前に、インフラストラクチャを1回だけセットアップする必要があります。クラウドプロバイダーに関係なく、ワークスペースのインフラストラクチャをセットアップするには、次のことを行う必要があります:
- Kubernetes向けGitLabエージェントがサポートするKubernetesクラスタを設定します。サポートされているKubernetesのバージョンを参照してください。
- Kubernetesクラスターのオートスケールが有効になっていることを確認します。
- Kubernetesクラスターで、次の手順を実行します:
- デフォルトのストレージクラスが定義されていて、各ワークスペースのボリュームを動的にプロビジョニングできることを確認します。
- チュートリアル: Kubernetes向けGitLabエージェントをセットアップする。
- オプション。ワークスペースでコンテナをビルドおよび実行します。
- オプション。プライベートコンテナレジストリのサポートを設定します。
- オプション。ワークスペースのsudoアクセスを設定します。
AWSを使用している場合は、OpenTofuチュートリアルを使用できます。詳細については、チュートリアル: AWSでワークスペースのインフラストラクチャをセットアップするを参照してください。
ワークスペースを作成する
信頼できるプロジェクトからのみワークスペースを作成してください。
前提要件:
- ワークスペースのインフラストラクチャをセットアップする必要があります。
- ワークスペースおよびエージェントプロジェクトに対してデベロッパーロール以上を持っている必要があります。
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 編集 > 新しいワークスペースを選択します。
- クラスターエージェントドロップダウンリストから、プロジェクトが属するグループが所有するクラスターエージェントを選択します。
- Git reference(Git参照)ドロップダウンリストから、GitLabがワークスペースの作成に使用するブランチ、タグ、またはコミットハッシュを選択します。デフォルトでは、これは表示しているブランチです。
- devfileドロップダウンリストから、次のいずれかを選択します:
- 変数に、ワークスペースに挿入する環境変数のキーと値を入力します。新しい変数を追加するには、変数を追加するを選択します。
- ワークスペースを作成を選択します。
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左側のサイドバーで、コード > マージリクエストを選択します。
- ワークスペースを作成するマージリクエストを選択します。
- コード > ワークスペースで開くを選択します。
- クラスターエージェントドロップダウンリストから、プロジェクトが属するグループが所有するクラスターエージェントを選択します。
- Git reference(Git参照)ドロップダウンリストから、GitLabがワークスペースの作成に使用するブランチ、タグ、またはコミットハッシュを選択します。デフォルトでは、これはソースブランチのマージリクエストです。
- devfileドロップダウンリストから、次のいずれかを選択します:
- 変数に、ワークスペースに挿入する環境変数のキーと値を入力します。新しい変数を追加するには、変数を追加するを選択します。
- ワークスペースを作成を選択します。
ワークスペースの起動には数分かかる場合があります。ワークスペースを開くには、プレビューでワークスペースを選択します。ターミナルにアクセスして、必要な依存関係をインストールすることもできます。
ワークスペース起動の進捗を監視する
ワークスペースを起動すると、初期化タスクとpostStartイベントの進捗をワークスペースログで確認できます。詳しくは、Workspace logs directoryを参照してください。
プラットフォームの互換性
ワークスペースのプラットフォーム要件は、開発ニーズによって異なります。
基本的なワークスペース機能では、基盤となるオペレーティングシステムに関係なく、Kubernetes向けGitLabエージェントをサポートする任意のlinux/amd64Kubernetesクラスタ上でワークスペースが実行されます。
プラットフォーム要件に合った方法を選択するには、ワークスペースのsudoアクセスの設定を参照してください。
ワークスペースでコンテナをビルドおよび実行する
開発環境では、ランタイム時に依存関係を管理および使用するために、コンテナのビルドと実行が必要になることがよくあります。ワークスペースでコンテナをビルドおよび実行するには、Sysboxを使用してワークスペースのsudoアクセスを設定する方法を参照してください。
プライベートコンテナレジストリのサポートを設定する
プライベートコンテナレジストリのイメージを使用するには:
- Kubernetesにイメージプルシークレットを作成します。
- このシークレットの
nameとnamespaceをKubernetes向けGitLabエージェントの設定に追加します。
詳細については、image_pull_secretsを参照してください。
ワークスペースのsudoアクセスを設定する
開発環境では、ランタイムに依存関係をインストール、設定、および使用するために、sudo権限が必要になることがよくあります。プラットフォーム要件に合った方法を選択します:
| 方法 | プラットフォーム要件 | 使用法 |
|---|---|---|
| Sysbox | 最新情報については、Sysboxディストリビューション互換性マトリックスを参照してください。 | コンテナの分離を改善し、VMと同じワークロードをコンテナで実行できるようにします。 |
| Kata Containers | 最新情報については、Kata Containersのインストールガイドを参照してください。 | 軽量な仮想マシンはコンテナのように動作しますが、強化されたワークロードの分離とセキュリティを提供します。 |
| ユーザーネームスペース | Kubernetesバージョン1.33以降では、ユーザーネームスペースがKubernetes機能ゲートの背後で有効になっており、これはデフォルトで有効になっています。最新情報については、Kubernetesの機能ゲートを参照してください。 | 追加のランタイムインストールは不要です。セキュリティを向上させるために、コンテナユーザーをホストユーザーから分離します。 |
前提要件:
Sysboxを使用する
Sysboxは、コンテナの分離を改善し、コンテナが仮想マシンと同じワークロードを実行できるようにするコンテナランタイムです。
Sysboxでsudoアクセスを設定するには:
Kubernetesクラスターで、Sysboxをインストールします。
Kubernetes向けGitLabエージェントを設定します:
- デフォルトのランタイムクラスを設定します。
default_runtime_classで、Sysboxのランタイムクラスを入力します。たとえば、sysbox-runcなどです。 - 特権エスカレーションを有効にします。
allow_privilege_escalationをtrueに設定します。 - Sysboxに必要な注釈を設定します。
annotationsを{"io.kubernetes.cri-o.userns-mode": "auto:size=65536"}に設定します。
- デフォルトのランタイムクラスを設定します。
Kata Containersを使用する
Kata Containersは、コンテナのように動作する軽量仮想マシンの標準実装ですが、仮想マシンのワークロード分離とセキュリティを提供します。
Kata Containersでsudoアクセスを設定するには:
Kubernetesクラスターで、Kata Containersをインストールします。
Kubernetes向けGitLabエージェントを設定します:
- デフォルトのランタイムクラスを設定します。
default_runtime_classで、Kata Containersのランタイムクラスを入力します。たとえば、kata-qemuなどです。 - 特権エスカレーションを有効にします。
allow_privilege_escalationをtrueに設定します。
- デフォルトのランタイムクラスを設定します。
ユーザーネームスペースを使用する
ユーザーネームスペースは、コンテナユーザーをホストユーザーから分離します。
ユーザーネームスペースでsudoアクセスを設定するには:
Kubernetesクラスターで、ユーザーネームスペースを設定します。
Kubernetes向けGitLabエージェントを設定します:
use_kubernetes_user_namespacesをtrueに設定します。allow_privilege_escalationをtrueに設定します。
SSHでワークスペースに接続する
前提要件:
- devfileで指定されたイメージに対してSSHアクセスを有効にする必要があります。詳細については、ワークスペースコンテナイメージを更新するを参照してください。
- GitLabワークスペースプロキシを指すTCPロードバランサーを設定する必要があります。詳細については、DNSレコードを更新するを参照してください。
SSHクライアントを使用してワークスペースに接続するには:
gitlab-workspaces-proxy-sshサービスの外部IPアドレスを取得します:kubectl -n gitlab-workspaces get service gitlab-workspaces-proxy-sshワークスペースの名前を取得します:
- 左側のサイドバーで、検索または移動先を選択します。
- あなたの作業を選択します。
- ワークスペースを選択します。
- 接続するワークスペースの名前をコピーします。
次のコマンドを実行します:
ssh <workspace_name>@<ssh_proxy_IP_address>パスワードには、少なくとも
read_apiスコープを持つパーソナルアクセストークンを入力します。
TCPロードバランサーを介してgitlab-workspaces-proxyに接続すると、gitlab-workspaces-proxyはユーザー名(ワークスペース名)を調べ、GitLabとやり取りして、以下を確認します:
- パーソナルアクセストークン
- ワークスペースへのユーザーアクセス
ワークスペースコンテナイメージを更新する
カスタムワークスペースイメージは、2つの方法で更新できます。
ワークスペースイメージがワークスペースベースイメージに基づいている場合、SSHサポートはすでに設定されており、使用する準備ができています。この方法では、イメージにワークスペースに必要なすべての設定があることが保証されます。詳細な手順については、カスタムワークスペースイメージを作成するを参照してください。
ワークスペースベースイメージを使用しない場合は、独自のベースイメージからビルドできます。これを行う場合は、ランタイムイメージでSSHサポートを手動で設定します:
- ランタイムイメージに
sshdをインストールします。 gitlab-workspacesという名前のユーザーを作成し、パスワードなしでコンテナにアクセスできるようにします。
以下は、SSHの設定例です:
FROM golang:1.20.5-bullseye
# Install `openssh-server` and other dependencies
RUN apt update \
&& apt upgrade -y \
&& apt install openssh-server sudo curl git wget software-properties-common apt-transport-https --yes \
&& rm -rf /var/lib/apt/lists/*
# Permit empty passwords
RUN sed -i 's/nullok_secure/nullok/' /etc/pam.d/common-auth
RUN echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config
# Generate a workspace host key
RUN ssh-keygen -A
RUN chmod 775 /etc/ssh/ssh_host_rsa_key && \
chmod 775 /etc/ssh/ssh_host_ecdsa_key && \
chmod 775 /etc/ssh/ssh_host_ed25519_key
# Create a `gitlab-workspaces` user
RUN useradd -l -u 5001 -G sudo -md /home/gitlab-workspaces -s /bin/bash gitlab-workspaces
RUN passwd -d gitlab-workspaces
ENV HOME=/home/gitlab-workspaces
WORKDIR $HOME
RUN mkdir -p /home/gitlab-workspaces && chgrp -R 0 /home && chmod -R g=u /etc/passwd /etc/group /home
# Allow sign-in access to `/etc/shadow`
RUN chmod 775 /etc/shadow
USER gitlab-workspaces