Help us learn about your current experience with the documentation. Take the survey.

配置工作空间

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

您可以使用 workspaces 为您的 GitLab 项目创建和管理隔离的开发环境。 每个工作空间都包含自己的一套依赖项、库和工具, 您可以根据每个项目的具体需求进行定制。

设置工作空间基础设施

在您 创建工作空间 之前,您只需设置一次基础设施。 要为工作空间设置基础设施,无论使用哪个云提供商,您必须:

  1. 设置一个 GitLab agent for Kubernetes 支持的 Kubernetes 集群。 请参阅 支持的 Kubernetes 版本
  2. 确保 Kubernetes 集群启用了自动扩缩容功能。
  3. 在 Kubernetes 集群中:
    1. 验证是否定义了 默认存储类, 以便可以为每个工作空间动态配置卷。
  4. 完成 教程:设置 GitLab agent for Kubernetes 中的所有步骤。
  5. 可选。在工作空间中构建和运行容器
  6. 可选。配置对私有容器注册表的支持
  7. 可选。配置工作空间的 sudo 访问权限

如果您使用 AWS,可以使用我们的 OpenTofu 教程。更多信息,请参阅 教程:在 AWS 上设置工作空间基础设施

创建工作空间

仅从可信项目创建工作空间。

先决条件:

  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。
  2. 选择 编辑 > 新建工作空间
  3. 集群代理 下拉列表中,选择项目所属组的集群代理。
  4. Git 引用 下拉列表中,选择 GitLab 用于创建工作空间的分支、标签或提交哈希。 默认情况下,这是您正在查看的分支。
  5. Devfile 下拉列表中,选择以下选项之一:
  6. 变量 中,输入您要注入到工作空间中的环境变量的键和值。 要添加新变量,选择 添加变量
  7. 选择 创建工作空间
  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。
  2. 在左侧边栏,选择 代码 > 合并请求
  3. 选择要为其创建工作空间的合并请求。
  4. 选择 代码 > 在工作空间中打开
  5. 集群代理 下拉列表中,选择项目所属组的集群代理。
  6. Git 引用 下拉列表中,选择 GitLab 用于创建工作空间的分支、标签或提交哈希。 默认情况下,这是合并请求的源分支。
  7. Devfile 下拉列表中,选择以下选项之一:
  8. 变量 中,输入您要注入到工作空间中的环境变量的键和值。 要添加新变量,选择 添加变量
  9. 选择 创建工作空间

工作空间可能需要几分钟才能启动。 要打开工作空间,在 预览 下,选择该工作空间。 您还可以访问终端并安装任何必要的依赖项。

平台兼容性

工作空间的平台要求取决于您的开发需求。

对于基本工作空间功能,工作空间可以在任何支持 GitLab agent for Kubernetes 的 linux/amd64 Kubernetes 集群上运行, 无论底层操作系统是什么。

要选择适合您平台要求的方法,请参阅 配置工作空间的 sudo 访问权限

在工作空间中构建和运行容器

开发环境通常需要构建和运行容器来管理和使用运行时依赖项。 要在工作空间中构建和运行容器,请参阅 使用 Sysbox 配置工作空间的 sudo 访问权限

配置对私有容器注册表的支持

要使用来自私有容器注册表的镜像:

  1. 在 Kubernetes 中 创建镜像拉取密钥
  2. 将此密钥的 namenamespace 添加到 GitLab agent for Kubernetes 配置 中。

更多信息,请参阅 image_pull_secrets

配置工作空间的 sudo 访问权限

开发环境通常需要 sudo 权限来安装、配置和使用运行时依赖项。选择适合您平台要求的方法:

方法 平台要求 使用方式
Sysbox 有关最新信息,请参阅 Sysbox 分发兼容性矩阵 提高容器隔离性,使容器能够运行与虚拟机相同的工作负载。
Kata Containers 有关最新信息,请参阅 Kata Containers 安装指南 轻量级 VM 性能像容器,但提供增强的工作负载隔离性和安全性。
用户命名空间 Kubernetes 1.33 或更高版本在 Kubernetes 功能门后面启用了用户命名空间,默认情况下已启用。有关最新信息,请参阅 Kubernetes 功能门 无需额外运行时安装。隔离容器用户与主机用户以提高安全性。

先决条件:

  • 您的容器镜像必须支持 任意用户 ID。 即使配置了 sudo 访问权限,在 devfile 中使用的容器镜像 也不能以用户 ID 0 运行。

使用 Sysbox

Sysbox 是一个容器运行时,可提高容器隔离性 并使容器能够运行与虚拟机相同的工作负载。

要使用 Sysbox 配置 sudo 访问权限:

  1. 在您的 Kubernetes 集群中,安装 Sysbox

  2. 配置 GitLab agent for Kubernetes:

    • 设置默认运行时类。在 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 访问权限:

  1. 在您的 Kubernetes 集群中,安装 Kata Containers

  2. 配置 GitLab agent for Kubernetes:

使用用户命名空间

用户命名空间 隔离 容器用户与主机用户。

要使用用户命名空间配置 sudo 访问权限:

  1. 在您的 Kubernetes 集群中,配置用户命名空间

  2. 配置 GitLab agent for Kubernetes:

通过 SSH 连接到工作空间

先决条件:

要通过 SSH 客户端连接到工作空间:

  1. 获取您的 gitlab-workspaces-proxy-ssh 服务的 IP 地址:

    kubectl -n gitlab-workspaces get service gitlab-workspaces-proxy-ssh
  2. 获取工作空间的名称:

    1. 在左侧边栏,选择 搜索或转到
    2. 选择 您的工作
    3. 选择 工作空间
    4. 复制您要连接的工作空间的名称。
  3. 运行此命令:

    ssh <workspace_name>@<ssh_proxy_IP_address>
  4. 对于密码,输入您的个人访问令牌,至少具有 read_api 范围。

当您通过 TCP 负载均衡器连接到 gitlab-workspaces-proxy 时, gitlab-workspaces-proxy 会检查用户名(工作空间名称)并与 GitLab 交互以验证:

  • 个人访问令牌
  • 用户对工作空间的访问权限

更新您的工作空间容器镜像

要更新 SSH 连接的运行时镜像:

  1. 在您的运行时镜像中安装 sshd
  2. 创建一个名为 gitlab-workspaces 的用户以允许无密码访问您的容器。
FROM golang:1.20.5-bullseye

# 安装 `openssh-server` 和其他依赖项
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/*

# 允许空密码
RUN sed -i 's/nullok_secure/nullok/' /etc/pam.d/common-auth
RUN echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config

# 生成工作空间主机密钥
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

# 创建一个 `gitlab-workspaces` 用户
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

# 允许对 `/etc/shadow` 的登录访问
RUN chmod 775 /etc/shadow

USER gitlab-workspaces

相关主题