ワークスペースを設定する
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
ワークスペースを使用すると、GitLabプロジェクト用に分離された開発環境を作成および管理できます。各ワークスペースは、独自の依存関係、ライブラリ、ツールで構成され、各プロジェクトの特定のニーズに合わせてカスタマイズできます。
ワークスペースのインフラストラクチャをセットアップする
ワークスペースを作成する前に、インフラストラクチャを1回だけセットアップする必要があります。クラウドプロバイダーに関係なく、ワークスペースのインフラストラクチャをセットアップするには、次のことを行う必要があります。
- Kubernetes向けGitLabエージェントがサポートするKubernetesクラスターをセットアップします。サポートされているKubernetesのバージョンを参照してください。
- Kubernetesクラスターのオートスケールが有効になっていることを確認します。
- Kubernetesクラスターで、次の手順を実行します。
- デフォルトのストレージクラスが定義されていて、各ワークスペースのボリュームを動的にプロビジョニングできることを確認します。
- Kubernetes向けGitLabエージェントのセットアップチュートリアルのすべてのステップを完了してください。
- オプション。ワークスペースでコンテナをビルドおよび実行します。
- オプション。プライベートコンテナレジストリのサポートを設定します。
- オプション。ワークスペースのsudoアクセスを設定します。
AWSを使用している場合は、OpenTofuチュートリアルを使用できます。詳細については、AWSでのワークスペースインフラストラクチャのセットアップチュートリアルを参照してください。
ワークスペースを作成する
ワークスペースは信頼できるプロジェクトからのみ作成してください。
前提条件:
- ワークスペースのインフラストラクチャをセットアップする必要があります。
- ワークスペースおよびエージェントプロジェクトに対して、デベロッパー、メンテナー、またはオーナーロールが必要です。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 編集 > 新しいワークスペースを選択します。
- クラスターエージェントドロップダウンリストから、プロジェクトが属するグループが所有するクラスターエージェントを選択します。
- Git参照ドロップダウンリストから、GitLabがワークスペースの作成に使用するブランチ、タグ、またはコミットハッシュを選択します。これは、デフォルトで現在表示しているブランチです。
- devfileドロップダウンリストから、次のいずれかを選択します。
- 変数に、ワークスペースに挿入する環境変数のキーと値を入力します。新しい変数を追加するには、変数を追加を選択します。
- ワークスペースを作成を選択します。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左サイドバーで、コード > マージリクエストを選択します。
- ワークスペースを作成したいマージリクエストを選択します。
- コード > ワークスペースで開くを選択します。
- クラスターエージェントドロップダウンリストから、プロジェクトが属するグループが所有するクラスターエージェントを選択します。
- Git参照ドロップダウンリストから、GitLabがワークスペースの作成に使用するブランチ、タグ、またはコミットハッシュを選択します。これは、デフォルトでマージリクエストのソースブランチです。
- devfileドロップダウンリストから、次のいずれかを選択します。
- 変数に、ワークスペースに挿入する環境変数のキーと値を入力します。新しい変数を追加するには、変数を追加を選択します。
- ワークスペースを作成を選択します。
ワークスペースの起動には数分かかる場合があります。ワークスペースを開くには、プレビューでワークスペースを選択します。ターミナルにアクセスして、必要な依存関係をインストールすることもできます。
ワークスペースの起動初期化進捗を監視する
ワークスペースを起動すると、初期化タスクとpostStartイベントの進捗をワークスペースログで監視できます。詳細については、ワークスペースログディレクトリを参照してください。
プラットフォームの互換性
ワークスペースのプラットフォーム要件は、開発ニーズによって異なります。
基本的なワークスペース機能の場合、ワークスペースは基盤となるオペレーティングシステムに関係なく、Kubernetes向けGitLabエージェントをサポートするあらゆるlinux/amd64 Kubernetesクラスター上で動作します。
プラットフォーム要件に合った方法を選択するには、ワークスペースのsudoアクセスを設定するを参照してください。
ワークスペースでコンテナをビルドおよび実行する
開発環境では、ランタイム時に依存関係を管理および使用するために、コンテナのビルドと実行が必要になることがよくあります。ワークスペース内でコンテナをビルドおよび実行するには、ワークスペースのsudoアクセスを設定するを参照してください。
プライベートコンテナレジストリのサポートを設定する
プライベートコンテナレジストリのイメージを使用するには:
- Kubernetesにイメージプルシークレットを作成します。
- このシークレットの
nameとnamespaceをKubernetes向けGitLabエージェントの設定に追加します。
詳細については、image_pull_secretsを参照してください。
ワークスペースのsudoアクセスを設定する
開発環境では、ランタイムに依存関係をインストール、設定、および使用するために、sudo権限が必要になることがよくあります。プラットフォーム要件に合った方法を選択してください:
| 方法 | プラットフォーム要件 | 使用法 |
|---|---|---|
| Sysbox | 最新情報については、Sysbox distribution compatibility matrixを参照してください。 | コンテナの分離を改善し、コンテナが仮想マシンと同じワークロードを実行できるようにします。 |
| Kata Containers | 最新情報については、Kata Containers installation guidesを参照してください。 | 軽量のVMはコンテナのように動作しますが、強化されたワークロードの分離とセキュリティを提供します。 |
| ユーザーネームスペース | Kubernetesバージョン1.33以降では、Kubernetes機能ゲートの背後でユーザーネームスペースが有効になっており、これはデフォルトで有効になっています。最新情報については、Kubernetes Feature Gatesを参照してください。 | 追加のランタイムインストールは不要です。コンテナユーザーをホストユーザーから分離し、セキュリティを向上させます。 |
前提条件:
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