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-workspaces-proxy
설치. - GitLab 에이전트를 설치하고 구성합니다.
- 최소한 root 그룹에서 Developer 역할이 있어야 합니다.
- 이 기능을 사용하려는 각 프로젝트에서 devfile을 생성합니다:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 프로젝트의 루트 디렉터리에
.devfile.yaml
이라는 파일을 만듭니다. 예제 구성 중 하나를 사용할 수 있습니다.
- devfile에서 사용되는 컨테이너 이미지가 임의의 사용자 ID를 지원하는지 확인합니다.
작업공간 생성
- Git 참조 및 Devfile 위치가 GitLab 16.10에서 도입됨.
- 자동 종료 전 시간이 GitLab 16.10에서 작업공간이 자동으로 종료됨으로 이름이 변경되었습니다.
작업공간을 생성하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택합니다.
- 작업 내 작업을 선택하세요.
- 작업공간을 선택하세요.
- 새 작업공간을 선택하세요.
- 프로젝트 드롭다운 디렉터리에서 .devfile.yaml 파일이 포함된 프로젝트를 선택하세요.
- 클러스터 에이전트 드롭다운 디렉터리에서 프로젝트 소속 그룹이 소유한 클러스터 에이전트를 선택하세요.
- Git 참조 드롭다운 디렉터리에서 작업공간을 생성하는 데 사용되는 브랜치, 태그 또는 커밋 해시를 선택하세요.
- Devfile 위치에 작업공간을 구성하는 데 사용되는 devfile의 경로를 입력하세요. devfile이 프로젝트의 루트 디렉터리에 없는 경우 상대 경로를 지정하세요.
- 작업공간이 자동으로 종료됨에 작업공간이 자동으로 종료될 때까지의 시간(시간 단위)을 입력하세요. 이 시간 초과는 작업 공간이 과도한 리소스를 소비하거나 무기한으로 실행되는 것을 방지하는 안전 장치입니다.
- 작업공간 생성을 선택하세요.
작업공간을 시작하는 데 몇 분 정도 걸릴 수 있습니다. 미리보기 아래에서 작업공간을 선택하여 열 수 있습니다. 또한 터미널에 액세스하여 필요한 의존성을 설치할 수 있습니다.
SSH로 작업공간에 연결
- GitLab 16.3에서 도입됨.
필수 컴포넌트:
- 작업공간에 SSH가 활성화되어 있어야 합니다.
-
gitlab-workspaces-proxy
를 가리키는 TCP 로드 밸런서가 있어야 합니다.
SSH 클라이언트로 작업공간에 연결하려면:
-
다음 명령을 실행하세요:
ssh <workspace_name>@<ssh_proxy>
-
패스워드로 개인 액세스 토큰을 입력하세요. 최소한
read_api
범위를 갖춘 토큰이어야 합니다.
TCP 로드 밸런서를 통해 gitlab-workspaces-proxy
에 연결하는 경우
gitlab-workspaces-proxy
는 작업공간 이름과 관련하여 다음을 확인하기 위해 GitLab과 상호 작용합니다:
- 개인 액세스 토큰
- 작업공간에 대한 사용자 액세스
SSH 연결을 위한 gitlab-workspaces-proxy
설정
필수 컴포넌트:
- 클라이언트 확인을 위해 SSH 호스트 키가 있어야 합니다.
이제 SSH가 기본적으로 활성화되어 있습니다 gitlab-workspaces-proxy
.
GitLab Helm 차트와 함께 gitlab-workspaces-proxy
를 설정하려면:
-
다음 명령을 실행하세요:
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":"failed to renew lease gitlab-agent-remote-dev-dev/agent-123XX-lock: timed out waiting for the condition\n","agent_id":XXXX}
이 문제는 에이전트 인스턴스가 리더십 리스를 갱신할 수 없을 때 발생하며, 이로 인해 remote_development
모듈을 포함한 리더 전용 모듈이 종료됩니다.
이 문제를 해결하려면 에이전트 인스턴스를 다시 시작하세요.