뒤로가기

GitLab

Gitlab 마이그레이션 후 업그레이드 (with. Gitlab-Runner)

선지호 2022.11.28.

개요

다나와에서는 소스 버전 관리를 위하여 깃랩을 사용하고 있습니다. 하지만 사용하고 있던 버전에 CVE 취약점이 발견되어 이번 기회에 업그레이드를 진행하였습니다.

기존 깃랩 구조

  • gitlab: v12.8.5
  • gitlab-runner (with. k8s): kubernetes v1.16.4

변경 된 구조

  • gitlab: v15.4.2
  • gitlab-runner (with. docker): Docker v20.10.18

왜 도커로 변경되었는가?

쿠버네티스로 구축하였던 이유는 빌드를 진행할 경우 치솟는 컴퓨팅 리소스를 분산하여 감당하기 위해 진행했습니다. 하지만, 사용하다보니 빌드를 진행할 때 겹치는 시간대에 많은 리소스를 사용하는 경우는 거의 없었기 때문에, 해당 구조를 Docker Gilab Runner로 변경하였습니다


마이그레이션

1. 백업

기존에 있던 데이터를 백업 합니다.

$ sudo gitlab-backup create
$ ls -alh /var/opt/backups (백업 폴더 위치)
# 1649393378_2022_04_08_12.10.14_gitlab_backup.tar (이런 형식으로 백업 파일이 생성됩니다.)

2. 복원

셋팅을 한 뒤 복원합니다. 이때, 버전은 같은 버전을 사용하여야 합니다.

$ sudo gitlab-backup restore BACKUP=1649393378_2022_04_08_12.10.14 ( _gitlab_backup.tar 부분은 지우고 입력 )

정상적으로 업데이트가 되었는지 실제 프로젝트로 이동하여 해당 내용을 확인합니다. —

업그레이드

1. 업그레이드 순서 확인

깃랩은 업그레이드에 순서가 있습니다. 해당 내용은 아래 링크를 참조하시고 확인하시면 됩니다.

현재 저희 버전에 맞게 진행한다면 아래와 같습니다

(현재)12.8.5 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> 13.8.8 -> 13.12.15 -> 14.0.12 -> 14.3.6 -> 14.9.5 -> 14.10.Z -> 15.0.Z -> 15.1.Z (for GitLab instances with multiple web nodes) -> 15.4.0 -> latest 15.Y.Z
  • https://docs.gitlab.com/ee/update/index.html#background-migrations

2. 업그레이드 진행

yum 이나 apt와 같은 패키지 매니저를 사용하여 서버에서 직접 업그레이드 하는 경우는 아래와 같이 remove와 install을 여러번 거쳐야 합니다

# 12.10.14로 업그레이드
sudo yum remove gitlab-ce-12.8.1-ce.0.el7.x86_64 -y
sudo yum install gitlab-ce-12.10.14-ce.0.el7.x86_64 -y
 
# 13.0.14로 업그레이드
sudo yum remove gitlab-ce-12.10.14-ce.0.el7.x86_64 -y
sudo yum install gitlab-ce-13.0.14-ce.0.el7.x86_64 -y

# 13.1.11로 업그레이드
sudo yum remove gitlab-ce-13.0.14-ce.0.el7.x86_64 -y
sudo yum install gitlab-ce-13.1.11-ce.0.el7.x86_64 -y
 
# 13.8.8로 업그레이드
sudo yum remove gitlab-ce-13.1.11-ce.0.el7.x86_64 -y
sudo yum install gitlab-ce-13.8.8-ce.0.el7.x86_64 -y
 
# 13.12.15로 업그레이드
sudo yum remove gitlab-ce-13.8.8-ce.0.el7.x86_64 -y
sudo yum install gitlab-ce-13.12.15-ce.0.el7.x86_64 -y

따라서 저희는 설치와 데이터 백업 및 업그레이드가 좀 더 용이한 컨테이너 환경으로 gitlab을 사용하게 되었습니다

# 12.10.14로 업그레이드
docker stop gitlab && docker rm gitlab
docker run --detach --name gitlab \
-p 6443:6443 \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:12.10.14-ce.0
 
# 13.0.14로 업그레이드
docker stop gitlab && docker rm gitlab
docker run --detach --name gitlab \
-p 6443:6443 \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:13.0.14-ce.0
 
# 13.1.11로 업그레이드
docker stop gitlab && docker rm gitlab
docker run --detach --name gitlab \
-p 6443:6443 \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:13.1.11-ce.0
 
# 13.8.8로 업그레이드
docker stop gitlab && docker rm gitlab
docker run --detach  --name gitlab \
-p 6443:6443 \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:13.8.8-ce.0
 
# 13.12.15로 업그레이드
docker stop gitlab && docker rm gitlab
docker run --detach --name gitlab \
-p 6443:6443 \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:13.12.15-ce.0

3. Gitlab Runner 등록

이전 스텝까지 전부 진행 되었다면 아마 소스코드에서 git pull / push 와 같은 버전관리에 대해서는 문제가 없을 것입니다. 하지만, CI/CD 까지 생각한다면 Gitlab Runner 설정을 새로 해주셔야 합니다

관리자 영역 > 개요 > Runners > Register an instance runner 버튼 > Show runner installation and registration instructions 

이렇게 이동한 뒤 Docker 버튼을 클릭하여 해당 문서를 확인합니다

  • https://docs.gitlab.com/runner/install/docker.html

그렇게 된다면 아래와 같은 커멘드를 얻게 됩니다.

docker run --rm -it --network host -v /etc/hosts:/etc/hosts:ro -v /data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

이 커멘드를 입력하여 깃랩 러너를 등록합니다.

만약 500에러가 발생한다면 아래 링크를 따라 해결해보시기 바랍니다.

  • https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/4055

/images/2022-11-28-Gitlab/2.png

/images/2022-11-28-Gitlab/1.png

3. Gitlab Runner 실행

정상적으로 등록이 되었다면 아래와 같이 설정될 것입니다. 그렇다면, 이제 실행 스크립트와 종료스크립트를 작성하여 진행 해보겠습니다

실행 스크립트

docker run -d --name gitlab-runner --restart always --network host -v /etc/hosts:/etc/hosts:ro -v /data/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

종료 스크립트

docker stop gitlab-runner && docker rm gitlab-runner

정상적으로 실행 되었다면 아래와 같이 조회 됩니다.

/images/2022-11-28-Gitlab/4.png

4. 프로젝트 생성

프로젝트를 만들고 아래와 같은 .gitlab-ci.yaml 파일을 추가합니다.

또한, 설정 > CI/CD > Variables 에 DOCKER_HOST를 하나 등록해 줍니다. 이 경우에는 도커 REMOTE API 가 오픈되어 있어야 합니다.

/images/2022-11-28-Gitlab/3.png

image: dcr.danawa.io/alpine-k8s-java:8

cache:
  key: cicd
  paths:
  - /builds/cicd/deploy/cicd/.m2/repository
  
variables:
  MAVEN_OPTS: "-Dmaven.repo.local=/builds/cicd/deploy/cicd/.m2/repository"

stages:
- build

Build-cicd-test:
  stage: build
  script:
  - git clone https://github.com/danawalab/dsearch-indexer.git
  - cd dsearch-indexer
  - git branch -v >> branch-desc.txt
  - sh mvnw clean && sh mvnw package -DskipTests
  - export VERSION="$(grep -oPm2 "(?<=<version>)[^<]+" pom.xml | sed -n 2p)";
  - docker build --build-arg VERSION=${VERSION} -t dsearch-indexer:latest .
  - cat Dockerfile

5. CI/CD 실행

셋팅이 전부 되었다면 아래 이동경로를 따라 클릭한 뒤 CI/CD 실행을 합니다.

만약 pending상태로 너무 오래 걸린다면 깃랩 러너와 깃랩의 통신이 정상적이지 않을 가능성이 큽니다.

따라서 호스트 설정이나 도메인 설정 부분 혹은 방화벽을 한번 다시 살펴보시기 바랍니다.

좌측 탭 CI/CD > 파이프라인 > 생성된 파이프라인 번호(ex. 32011) > 파이프라인 실행

/images/2022-11-28-Gitlab/5.png

정리

소스 버전 관리 및 CI/CD를 위하여 깃랩 및 깃랩 러너를 구성해보았습니다.

이러한 인프라를 설치하는 것은 개인적으로 생각하기에 레버리지가 높은 일이라고 생각합니다. 개발자의 소모 비용 측면에서 이런 인프라를 구축해둔다면 시간적 소모가 줄고 다른 업무를 더 할수 있기 때문입니다.

이 글이 많은 도움이 되었으면 좋겠습니다. 감사합니다.