Workspace 구성
- GitLab 15.11에 도입되었습니다. 기본으로 비활성화된
remote_development_feature_flag
라는 플래그와 함께.- GitLab 16.0에서 GitLab.com 및 Self-Managed에서 활성화되었습니다.
- GitLab 16.7에 대해 일반적으로 사용 가능해졌습니다.
remote_development_feature_flag
피처 플래그가 제거되었습니다.
귀하의 GitLab 프로젝트를 위해 격리된 개발 환경을 생성하고 관리하기 위해 작업 영역를 사용할 수 있습니다. 각 작업 영역에는 해당 프로젝트의 특정한 요구 사항을 충족하기 위해 사용자 정의할 수 있는 의존성, 라이브러리 및 도구가 포함되어 있습니다.
작업 영역 설정
- 프라이빗 프로젝트 지원은 GitLab 16.4에 도입되었습니다.
전제 조건
- GitLab 에이전트가 지원하는 Kubernetes 클러스터를 설정합니다. 지원되는 Kubernetes 버전을 확인하세요.
- Kubernetes 클러스터의 자동 크기 조정이 활성화되어 있는지 확인합니다.
- Kubernetes 클러스터에서:
- 각 작업 영역에 대해 볼륨이 동적으로 프로비저닝될 수 있도록 기본 스토리지 클래스가 정의되어 있는지 확인합니다.
- 선택한 Ingress 컨트롤러(예:
ingress-nginx
)를 설치하고 해당 컨트롤러가 도메인을 통해 접근할 수 있도록 합니다.- 개발 환경에서는
/etc/hosts
파일에 항목을 추가하거나 DNS 레코드를 업데이트합니다. - 프로덕션 환경에서는
*.<workspaces.example.dev>
및<workspaces.example.dev>
을 Ingress 컨트롤러에 의해 노출된 로드 밸런서로 지정합니다.
- 개발 환경에서는
- GitLab 작업 영역 프록시를 설정합니다. 작업 영역 프록시 설치합니다.
- GitLab 에이전트를 설치하고 구성합니다.
- 루트 그룹에서 적어도 Developer 역할이 있어야 합니다.
- 이 기능을 사용하려면 해당 프로젝트마다 devfile을 생성하세요.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 프로젝트의 루트 디렉터리에
.devfile.yaml
라는 파일을 생성합니다. 예시 구성 중 하나를 사용할 수 있습니다.
- devfile에서 사용된 컨테이너 이미지가 임의의 사용자 ID를 지원하는지 확인하세요.
작업 영역 생성
- Git 참조 및 Devfile 위치는 GitLab 16.10에 도입되었습니다.
- 자동 종료 전 경과 시간은 GitLab 16.10에서 이름이 변경되어 작업 영역 자동으로 종료됨으로 변경되었습니다.
작업 영역을 생성하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택합니다.
- 귀하의 작업을 선택합니다.
- 작업 영역을 선택합니다.
- 새 작업 영역을 선택합니다.
- 프로젝트 드롭다운 디렉터리에서 .devfile.yaml 파일이 있는 프로젝트를 선택합니다.
- 클러스터 에이전트 드롭다운 디렉터리에서 프로젝트가 속한 그룹이 소유한 클러스터 에이전트를 선택합니다.
- Git 참조 드롭다운 디렉터리에서 GitLab이 작업 영역을 생성하는 데 사용하는 브랜치, 태그 또는 커밋 해시를 선택합니다.
- Devfile 위치에는 작업 영역을 구성하는 데 사용하는 devfile의 경로를 입력합니다. 단, devfile이 프로젝트의 루트 디렉터리에 없는 경우 상대 경로를 지정합니다.
- 작업 영역 자동으로 종료됨에는 작업 영역이 자동으로 종료되기까지의 시간(시간 단위)을 입력합니다. 이 타임아웃은 작업 영역이 과도한 리소스를 소비하거나 무기한으로 실행되는 것을 방지하는 안전 조치입니다.
- 작업 영역 만들기를 선택합니다.
작업 영역을 시작하는 데 몇 분 정도 걸릴 수 있습니다. 작업 영역을 열려면 미리보기에서 작업 영역을 선택합니다. 터미널에 액세스해서 필요한 의존성을 설치할 수도 있습니다.
SSH로 작업 영역에 연결
- GitLab 16.3에서 도입되었습니다.
전제 조건:
- 작업 영역에 대해 SSH가 활성화되어 있어야 합니다.
- GitLab 작업 영역 프록시로 들어가는 TCP 로드 밸런서가 있어야 합니다.
SSH 클라이언트를 사용하여 작업 영역에 연결하려면:
-
다음 명령어를 실행하세요:
ssh <workspace_name>@<ssh_proxy>
-
비밀번호란에는
read_api
스코프를 갖는 개인 액세스 토큰을 입력하세요.
TCP 로드 밸런서를 통해 gitlab-workspaces-proxy
에 연결할 때,
gitlab-workspaces-proxy
는 사용자 이름(작업 영역 이름)을 검사하고 다음을 확인합니다:
- 개인 액세스 토큰
- 작업 영역에 대한 사용자의 액세스 권한
SSH 연결을 위한 GitLab 작업 영역 프록시 설정
전제 조건:
- 클라이언트 인증을 위한 SSH 호스트 키가 있어야 합니다.
이제 SSH가 GitLab Helm 차트를 사용하여 기본적으로 활성화되었습니다.
-
다음 명령어를 실행하세요:
ssh-keygen -f ssh-host-key -N '' -t rsa export SSH_HOST_KEY=$(pwd)/ssh-host-key
-
생성된 SSH 호스트 키로
gitlab-workspaces-proxy
를 설치합니다:helm upgrade --install gitlab-workspaces-proxy \ gitlab-workspaces-proxy/gitlab-workspaces-proxy \ --version 0.1.8 \ --namespace=gitlab-workspaces \ --create-namespace \ --set="auth.client_id=${CLIENT_ID}" \ --set="auth.client_secret=${CLIENT_SECRET}" \ --set="auth.host=${GITLAB_URL}" \ --set="auth.redirect_uri=${REDIRECT_URI}" \ --set="auth.signing_key=${SIGNING_KEY}" \ --set="ingress.host.workspaceDomain=${GITLAB_WORKSPACES_PROXY_DOMAIN}" \ --set="ingress.host.wildcardDomain=${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \ --set="ingress.tls.workspaceDomainCert=$(cat ${WORKSPACES_DOMAIN_CERT})" \ --set="ingress.tls.workspaceDomainKey=$(cat ${WORKSPACES_DOMAIN_KEY})" \ --set="ingress.tls.wildcardDomainCert=$(cat ${WILDCARD_DOMAIN_CERT})" \ --set="ingress.tls.wildcardDomainKey=$(cat ${WILDCARD_DOMAIN_KEY})" \ --set="ssh.host_key=$(cat ${SSH_HOST_KEY})" \ --set="ingress.className=nginx"
런타임 이미지 업데이트
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
관련 주제
문제 해결
워크스페이스 생성 시 리스 갱신에 실패
메시지가 표시될 때
GitLab 쿠버네티스 에이전트에서 알려진 문제로 인해 워크스페이스를 생성할 수 없을 수 있습니다. 다음과 같은 오류 메시지가 에이전트 로그에 나타날 수 있습니다:
{"level":"info","time":"2023-01-01T00:00:00.000Z","msg":"리스 gitlab-agent-remote-dev-dev/agent-123XX-lock 갱신 실패: 조건을 기다리는 동안 시간 초과됨\n","agent_id":XXXX}
이 문제는 에이전트 인스턴스가 리더십 리스를 갱신하지 못하여 remote_development
모듈을 포함한 리더 전용 모듈이 종료되는 경우 발생합니다.
이 문제를 해결하려면 에이전트 인스턴스를 다시 시작하십시오.