Gitlab은 CI/CD 기능이 뛰어난 git repository 소프트웨어입니다.
같은 서비스를 제공하는 제품으로 GIthub이 있지만, 무료 버전에서 Private 작업자 수 제한이 없다는 점, Self-managed 버전을 제공한다는 장점이 있어서 GCP 인프라에 올릴 자체 깃 서버로 Gitlab을 선택하게 되었습니다.
추가적으로 자체 CI/CD 기능과 Kubernetes와의 연동도 제공한다는 점 덕분에 Kubernetes 클러스터에 올릴 코드를 관리하는데에는 Gitlab이 더 낫다는 판단을 했습니다.
그래서 이번 포스팅에서는 GCP 환경에서 GCE VM instance에 GItlab 서버를 구축하는 방법을 기록하려고 합니다.
1. VM instance 생성
우선 Gitlab이 올라갈 vm의 Hardware requirement는 다음과 같습니다.
Gitlab 사이트에서 말하는 GItlab 최소 사양은 4 cores CPU, 4GB RAM입니다.
Cloud 환경의 VM은 나중에도 Machine type을 바꿀 수 있기 때문에 우선 최소 사양으로 구성하고 필요할 때 사양을 늘리는 방식으로 사용하는 것이 비용을 최소화할 수 있습니다.
GCP에서 리소스 사용량을 추적해 추천 사양을 주기적으로 권장합니다. 이 기능을 사용해서 항상 최적화된 사양으로 인스턴스를 구성할 수 있습니다.
이번 포스팅에 사용할 VM은 4 core, 4GB RAM으로 구성했습니다.
필요한 디스크 용량은 따로 볼 순 없지만, 우선 30GB로 설정하고 마찬가지로 필요할때 추가적으로 구성하도록 합니다.
다음으로 OS를 선택해야 합니다. 다음은 Gitlab의 Software requirement입니다.
Debian 10을 지원하기 때문에 GCP VM 생성의 기본값인 Debian 10 OS에 설치하도록 하겠습니다.
위 설정으로 VM을 생성하고 Gitlab을 설치합니다.
2. Gitlab 설치
Gitlab에서는 Linux 패키지, Docker, Helm 등 다양한 방법으로 설치를 지원하고 있습니다.
이번 포스팅에서는 Linux 패키지를 이용해서 설치하겠습니다.
웹 페이지에 기술한 순서대로 설치를 수행합니다.
https://about.gitlab.com/install/#debian
Download and install GitLab
Learn about the various GitLab installation packages and downloads for Ubuntu, Debian, Docker, Google Cloud, and many more.
about.gitlab.com
우선 GItlab 설치에 필요한 패키지를 받습니다.
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates perl
Gitlab에는 email notification을 보내주는 기능이 있습니다. 이 기능을 사용하기 위해 서버에서 메일을 발송할 수 있는 패키지를 설치해야 하지만, 사용하지 않는다면 넘어가도 됩니다. 이번 포스팅에서는 넘어갔습니다.
sudo apt-get install -y postfix
Gitlab 패키지를 다운받아 repository에 넣습니다.
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
Gitlab을 설치합니다. EXTERNAL_URL 변수에는 Gitlab 웹페이지에 접속하기 위한 도메인 주소를 넣습니다. 서버의 IP 주소를 접속 주소로 사용할 수도 있지만, HTTPS 사용이나 편리한 접속을 위해서는 도메인 주소를 사용하는 것을 권장합니다.
하지만 저는 도메인 주소를 원했지만 도메인 구입은 원치 않았기 때문에 로컬 DNS를 변경하는 방법으로 사용했습니다.
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee
Gitlab 설치가 끝났다면 아래와 같은 화면을 볼 수 있습니다.
이제 VM의 외부IP주소를 브라우저에 입력하면 Gitlab 웹페이지를 볼 수 있습니다. 하지만 앞서 설정한 도메인 주소로 접속하기 위해서는 DNS 레코드를 변경해야 합니다.
윈도우10 기준으로 c:\windows\system32\drivers\etc\hosts.file 을 연 뒤 다음과 같이 IP주소와 도메인 주소를 입력합니다.
이제 제 로컬 컴퓨터에서는 http://gcp-team-gitlab.com으로 gitlab 서버에 접속할 수 있습니다.
GItlab 웹페이지에 접속하면 다음과 같이 로그인 페이지를 볼 수 있습니다.
첫 페이지에서 root 계정의 비밀번호를 설정할 수 있습니다. 비밀번호를 설정한 뒤 로그인하면 Gitlab 메인페이지로 진입해 기능을 사용할 수 있습니다.
GItlab의 시작은 프로젝트를 생성하는 것입니다. 다음과 같이 프로젝트의 이름, URL, VIsibility(Public인지, Private인지), Readme 등의 설정을 통해 프로젝트를 생성할 수 있습니다.
Root계정이나 Admin 권한의 계정으로 로그인하면 다음과 같은 어드민 페이지를 들어갈 수 있습니다. 첫 페이지는 대쉬보드와 함께 Gitlab을 관리할 수 있는 기능을 볼 수 있습니다.
모니터링 탭에 가보니 현재 서버의 리소스 사용량을 볼 수 있었습니다. Gitlab이 메모리는 3GB 가량, 디스크는 5GB 가량 사용하는 것 같습니다. 필요하면 GCE VM의 Machine type 변경, 디스크 추가를 통해 리소스를 추가할 수 있습니다.
3. Gitlab + VS Code 연동 설정
이제 제 로컬 환경의 VS Code에서 바로 코드를 commit할 수 있도록 Gitlab과 VS Code를 연동합니다.
우선 깃 저장소로 사용할 프로젝트를 하나 생성합니다.
프로젝트 페이지에서 Clone 버튼 클릭, 하단에 Open in your IDE 란에 VS Code를 클릭합니다.
클릭하면 VS Code가 열림과 함께 깃을 클로닝을 실행할 디렉토리를 지정할 수 있습니다.
설정이 끝나면 Gitlab 리포지토리에 올린 코드를 받을 수 있습니다.
커밋을 하는데 다음과 같은 에러가 난다면 Git을 사용할 계정과 email을 설정하지 않았기 때문입니다.
다음 명령어를 사용해 email과 계정명을 지정합니다. Gitlab에 사용된 email과 계정명을 사용하는 것이 관리에 용이합니다.
$ git config --global user.email "example@gmail.com"
$ git config --global user.name "example"
Push에 성공하면 Gitlab 프로젝트에서 다음과 같이 내역을 볼 수 있습니다.
ID,Password 인증이 아닌 SSH Key 인증을 사용하고 싶다면 User settings -> SSH keys에서 Public Key를 등록해 키 인증을 사용할 수 있습니다.
추가) Gitlab 세부 설정
Gitlab으로 email notification을 사용한다던가, 포트를 바꾸는 등의 세부 설정은 /etc/gitlab/gitlab.rb 파일의 수정을 통해 가능합니다.
external_url 행의 변경을 통해 접속 주소를 변경할 수 있습니다.
다음 행들의 변경을 통해 email notification을 위한 smtp 설정을 변경할 수 있습니다. (주석을 삭제해야 설정이 반영됩니다.
그 외에 다양한 설정을 gitlab.rb 파일에서 할 수 있습니다.
'GCP' 카테고리의 다른 글
GCP DNS Forwarding으로 원격지 DNS 서버에 질의하기(+DNS Peering) (0) | 2021.07.14 |
---|---|
GKE CNI Performance benchmark(2021-06-10) (0) | 2021.06.10 |
GCP Instance Metadata를 100% 활용하는 방법 (0) | 2021.04.27 |
AWS와 GCP간 HA (High-Availability) VPN 연결 구성하기 (2) | 2021.03.30 |
AWS RDS의 데이터를 GCP bigQuery에서 분석해보자 (Federated query, CDC migration) (17) | 2021.03.13 |