工作区配置 (Beta)
- 在极狐GitLab 15.11 中引入,功能标志名为
remote_development_feature_flag
。默认禁用。- 在极狐GitLab 16.0 中在 JihuLab.com 和私有化部署版本中启用。
- 在极狐GitLab 16.7 中正式可用。功能标志
remote_development_feature_flag
已移除。
您可以使用工作区为您的 GitLab 项目创建和管理隔离的开发环境。每个工作区都包含其自己的一组依赖项、库和工具,您可以根据每个项目的特定需求进行自定义。
设置工作区
在创建工作区之前,您只需设置一次基础设施。要设置工作区的基础设施:
- 设置一个 GitLab 代理支持的 Kubernetes 集群。 请参阅支持的 Kubernetes 版本。
- 确保 Kubernetes 集群的自动扩展功能已启用。
- 在 Kubernetes 集群中:
- 验证是否定义了默认存储类,以便可以为每个工作区动态配置卷。
- 安装您选择的 Ingress 控制器(例如
ingress-nginx
)。 - 安装并配置 GitLab 代理。
- 将
dns_zone
和*.<dns_zone>
指向 Ingress 控制器暴露的负载均衡器。此负载均衡器必须支持 WebSockets。 - 设置 GitLab 工作区代理。
- 可选。 为工作区配置 sudo 访问权限。
- 可选。 配置对私有容器注册表的支持。
创建工作区
- 对私有项目的支持在极狐GitLab 16.4 中引入。
- Git 引用 和 Devfile 位置 在极狐GitLab 16.10 中引入。
- 自动终止前的时间 在极狐GitLab 16.10 中重命名为 工作区在以下时间后自动终止。
- 变量 在极狐GitLab 17.1 中引入。
前提条件:
- 您必须设置工作区基础设施。
- 您必须至少具有工作区和代理项目的开发者角色。
- 在您要创建工作区的每个项目中,创建一个 devfile:
- 在左侧边栏中,选择搜索或转到并找到您的项目。
- 在项目的根目录中,创建一个名为
devfile
的文件。您可以使用示例配置之一。
- 确保 devfile 中使用的容器镜像支持任意用户 ID。
要创建工作区:
- 在左侧边栏中,选择搜索或转到并找到您的项目。
- 选择编辑 > 新建工作区。
- 从集群代理下拉列表中,选择由项目所属组拥有的集群代理。
- 从Git 引用下拉列表中,选择 GitLab 用于创建工作区的分支、标签或提交哈希。
- 在Devfile 位置中,输入用于配置工作区的 devfile 路径。如果您的 devfile 不在项目的根目录中,请指定相对路径。
- 在工作区在以下时间后自动终止中,输入工作区自动终止前的小时数。此超时是一项安全措施,以防止工作区消耗过多资源或无限期运行。
- 在变量中,输入要注入工作区的环境变量的键和值。要添加新变量,请选择添加变量。
- 选择创建工作区。
工作区可能需要几分钟才能启动。要打开工作区,请在预览下选择工作区。您还可以访问终端并安装任何必要的依赖项。
配置对私有容器注册表的支持
- 在极狐GitLab 17.6 中引入。
要使用来自私有容器注册表的镜像:
- 在 Kubernetes 中创建一个镜像拉取密钥。
- 将此密钥的
name
和namespace
添加到 GitLab 代理配置中。
为工作区配置 sudo 访问权限
- 在极狐GitLab 17.4 中引入。
前提条件:
开发环境通常需要 sudo 权限来在运行时安装、配置和使用依赖项。您可以通过以下方式为工作区配置安全的 sudo 访问权限:
使用 Sysbox
Sysbox 是一种容器运行时,可增强容器隔离性, 并使容器能够运行与虚拟机相同的工作负载。
要使用 Sysbox 为工作区配置 sudo 访问权限:
- 在 Kubernetes 集群中,安装 Sysbox。
- 在极狐GitLab 工作区代理中:
- 将
default_runtime_class
设置为 Sysbox 的运行时类(例如sysbox-runc
)。 - 将
allow_privilege_escalation
设置为true
。
- 将
使用 Kata Containers
Kata Containers 是一种轻量级虚拟机的标准实现,其性能类似于容器,但提供虚拟机的工作负载隔离和安全性。
要使用 Kata Containers 为工作区配置 sudo 访问权限:
- 在 Kubernetes 集群中,安装 Kata Containers。
- 在极狐GitLab 工作区代理中:
- 将
default_runtime_class
设置为 Kata Containers 的运行时类之一(例如kata-qemu
)。 - 将
allow_privilege_escalation
设置为true
。
- 将
使用用户命名空间
用户命名空间隔离了容器内运行的用户与主机上的用户。
要使用用户命名空间为工作区配置 sudo 访问权限:
- 在 Kubernetes 集群中,配置用户命名空间。
- 在极狐GitLab 工作区代理中,将
use_kubernetes_user_namespaces
和allow_privilege_escalation
设置为true
。
使用SSH连接到工作区
- 在极狐GitLab 16.3中引入。
必要条件:
要使用SSH客户端连接到工作区,请执行以下操作:
-
获取
gitlab-proxy-ssh
服务的外部IP地址:kubectl -n gitlab-workspaces get service gitlab-workspaces-proxy-ssh
-
获取工作区的名称
- 在左侧边栏中,选择“搜索”或转到。
- 选择你的工作。
- 选择工作区。
- 复制要连接到的工作区的名称。
-
运行此命令:
ssh <workspace_name>@<ssh_proxy_IP_address>
- 对于密码,请输入至少具有
read_API
范围的个人访问令牌。
当您通过TCP负载均衡器连接到gitlab-proxy-proxy
时, gitlab-configuration-proxy
检查用户名(工作区名称)并与GitLab交互以验证:
- 个人访问令牌
- 用户访问工作区
更新您的运行时镜像
要更新 SSH 连接的运行时镜像:
- 在运行时镜像中安装
sshd
。 - 创建名为
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
相关主题
故障排除
在使用MySQL时,您可能会遇到以下问题。
错误:续订租约失败
由于Kubernetes的GitLab代理中的已知问题,您可能无法创建工作区。以下错误消息可能会出现在代理的日志中:
{"level":"info","time":"2023-01-01T00:00:00.000Z","msg":"failed to renew lease gitlab-agent-remote-dev-dev/agent-123XX-lock: timed out waiting for the condition\n","agent_id":XXXX}
当代理实例无法续订其领导层租约时会出现此问题,这将导致仅领导层模块(包括remote_development
模块)关闭。要解决此问题,请重新启动代理实例。
错误:No agents available to create workspaces
在项目中创建工作区时,可能会出现以下错误:
No agents available to create workspaces. Please consult Workspaces documentation for troubleshooting.
要解决此问题,请执行以下操作: