대화형 웹 터미널

대화형 웹 터미널 (Interactive web terminals)

대화형 웹 터미널은 CI 파이프라인을 위해 일회성 명령을 실행할 수 있는 터미널을 GitLab에서 사용자에게 제공해요. SSH로 디버깅하는 방법처럼 생각하면 되는데, 잡 페이지에서 바로 실행할 수 있다는 점이 달라요. 이 기능은 GitLab Runner가 배포된 환경에 사용자에게 셸 액세스를 주는 것이므로, 사용자를 보호하기 위한 보안 조치가 취해져 있어요.

GitLab.com의 인스턴스 러너는 대화형 웹 터미널을 제공하지 않아요. 지원 추가 진행 상황은 이 이슈를 따라가세요. GitLab.com에 호스팅된 그룹·프로젝트에서는 자체 그룹 또는 프로젝트 러너를 사용할 때 대화형 웹 터미널을 사용할 수 있어요.

출처: 문서

본문

구성 (Configuration)

대화형 웹 터미널이 동작하려면 두 가지를 구성해야 해요:

Helm 차트 부분 지원

대화형 웹 터미널은 gitlab-runner Helm 차트에서 부분적으로 지원돼요. 다음 조건에서 활성화돼요:

  • replica 수가 하나일 때
  • loadBalancer 서비스를 사용할 때

이런 제한을 해결하는 지원은 다음 이슈에서 추적되고 있어요:

실행 중인 잡 디버깅하기

모든 executor가 지원되는 것은 아니에요. docker executor는 빌드 스크립트가 끝난 후에도 계속 실행되지 않아요. 그 시점에 터미널은 자동으로 연결을 끊고 사용자가 끝내기를 기다리지 않아요. 이 동작 개선 진행 상황은 이 이슈를 따라가세요.

전제 조건:

  • 프로젝트에 대해 Developer, Maintainer 또는 Owner 역할이 있어야 하거나, 인스턴스에 관리자 액세스 권한이 있어야 해요.
  • 관리자가 아니라면 잡을 직접 시작했어야 해요.
  • 인스턴스에 Admin Mode가 켜져 있다면 관리자는 세션에서 Admin Mode를 켜야 해요.
  • 잡이 보호 브랜치(protected branch)에서 실행됐다면 해당 브랜치에 push 또는 merge할 수 있어야 해요. 잡이 보호 태그(protected tag)에서 실행됐다면 해당 태그를 만들 수 있어야 해요. 자세한 내용은 CI/CD 권한을 참고하세요.

가끔 잡이 실행되는 동안 예상대로 되지 않을 때가 있어요. 이럴 때 디버깅을 돕는 셸이 있다면 유용하겠죠. 잡이 실행되면 오른쪽 패널에 현재 잡의 터미널을 여는 debug 버튼 ( external-link )이 표시돼요. 잡을 시작한 사람만 그 잡을 디버깅할 수 있어요. 관리자는 자신이 시작하지 않은 잡도 디버깅할 수 있어요.

Example of job running with terminal available

선택하면 터미널 페이지로 새 탭이 열리고, 표준 셸처럼 명령을 입력할 수 있어요.

A command being executed on a job's terminal page

잡이 완료된 후에도 터미널이 열려 있으면, 구성된 [session_server].session_timeout 시간이 지날 때까지 잡이 끝나지 않아요. 이를 피하려면 잡이 끝난 뒤 터미널을 닫으면 돼요.

Job complete with active terminal session

더 알아보기

다음으로는 GitLab Runner의 [session_server] 고급 설정을 자세히 보고, Runbook / 터미널 보안 문서를 읽으면 터미널을 안전하게 운영하는 방법을 익힐 수 있어요.