카테고리 보관물: GitLab

gitlab-runner container 생성 및 GitLab 등록

개요

Container 환경에서 gitlab-runner를 생성하고 GitLab에 등록하는 절차를 정리합니다. Docker로 gitlab-runner 컨테이너를 실행한 후, 컨테이너 내부에서 gitlab-runner register 명령으로 GitLab 서버와 연결합니다. 등록 완료 후 CI/CD 파이프라인이 해당 runner에서 실행됩니다.

Container 환경에서 gitlab-runner를 생성하고 GitLab에 등록 하는 절차에 관한 내용 입니다.

gitlab-runner 컨테이너 생성

gitlab-runner 컨테이너는 Docker 소켓(/var/run/docker.sock)을 마운트하여 실행합니다. 이를 통해 gitlab-runner 컨테이너가 호스트의 Docker 데몬에 직접 명령을 전달할 수 있습니다. CI/CD 파이프라인에서 Docker 이미지 빌드나 컨테이너 실행이 필요할 때 이 소켓 마운트가 핵심 역할을 합니다. --restart always 옵션으로 서버 재부팅 시에도 gitlab-runner가 자동으로 기동됩니다.

<admin-user>@<runner-server>:~$ docker run --detach \
> --name gitlab-runner \
> --restart always \
> --volume /srv/gitlab-runner/config:/etc/gitlab-runner \
> --volume /var/run/docker.sock:/var/run/docker.sock \
> gitlab/gitlab-runner:latest
Unable to find image 'gitlab/gitlab-runner:latest' locally
latest: Pulling from gitlab/gitlab-runner
d9802f032d67: Pull complete
d71acd29818d: Pull complete
2df872e9a082: Pull complete
Digest: sha256:c7e23480375fca186743d8fbf6eff3b682da48b70a9d2980ce89863571fb6fa8
Status: Downloaded newer image for gitlab/gitlab-runner:latest
4f0eb91d3bd9cdc008545ab664e5746de3eefff6f92fce380dd4b29d290c8154
<admin-user>@<runner-server>:~$ docker ps -a
CONTAINER ID   IMAGE                         COMMAND                  CREATED              STATUS              PORTS     NAMES
4f0eb91d3bd9   gitlab/gitlab-runner:latest   "/usr/bin/dumb-init …"   About a minute ago   Up About a minute             gitlab-runner

Docker Executor 동작 방식

gitlab-runner의 executor 종류는 Shell, Docker, Kubernetes 등 다양합니다. 이 포스트에서는 Docker executor를 사용합니다. Docker executor는 각 CI/CD Job을 독립된 Docker 컨테이너 안에서 실행하므로, Job 간 의존성 오염 없이 클린한 실행 환경을 보장합니다. --docker-image docker:latest는 Job 실행에 사용할 기본 이미지이며, 개별 Job의 .gitlab-ci.yml에서 image:를 지정하면 이를 덮어쓸 수 있습니다.

Docker-in-Docker(DinD) 방식으로 파이프라인 내부에서 Docker build를 실행하려면 --docker-volumes /var/run/docker.sock:/var/run/docker.sock를 함께 전달하여 호스트 소켓을 컨테이너에 공유합니다. 이 방식은 격리성보다 편의성을 우선할 때 적합합니다.

등록 token 확인

GitLab 프로젝트(또는 그룹)의 Settings > CI/CD > Runners에서 등록에 필요한 token을 확인합니다.

GitLab 프로젝트 Settings에서 gitlab-runner 등록용 token 확인

gitlab-runner GitLab 등록

컨테이너 내부에서 gitlab-runner register 명령으로 GitLab 서버 URL, token, executor, Docker image를 지정하여 runner를 등록합니다.

<admin-user>@<runner-server>:~$ docker container exec -it gitlab-runner bash
root@4f0eb91d3bd9:/# gitlab-runner register -n \
> --url http://x.x.x.x:8081/ \
> --registration-token <gitlab token> \
> --description gitlab-runner \
> --executor docker \
> --docker-image docker:latest \
> --docker-volumes /var/run/docker.sock:/var/run/docker.sock
Runtime platform                                    arch=amd64 os=linux pid=24 revision=374d34fd version=17.6.0
Running in system-mode.

WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://docs.gitlab.com/ee/ci/runners/new_creation_workflow
Registering runner... succeeded                     runner=JdXqqyrV
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

등록 확인

GitLab 프로젝트의 Settings > CI/CD > Runners에서 runner가 정상 등록되었는지 확인합니다. 등록된 runner는 초록색 원(●)으로 표시되며, 이름 아래에 runner ID와 마지막 통신 시간이 표시됩니다. runner 상태가 회색 원으로 표시된다면 gitlab-runner 컨테이너가 실행 중이지 않거나 GitLab 서버와의 네트워크 연결에 문제가 있는 것입니다.

등록 완료 후 프로젝트에 .gitlab-ci.yml 파일을 추가하면 GitLab이 자동으로 파이프라인을 트리거하고 등록된 runner에 Job을 할당합니다. runner가 Specific 타입으로 등록된 경우 해당 프로젝트에서만 동작하며, Group 또는 Shared runner로 등록하면 더 넓은 범위에서 재사용할 수 있습니다.

GitLab CI/CD 설정에서 gitlab-runner 등록 완료 확인

참고

참고 문서: GitLab Runner Docker 설치 공식 문서 · GitLab Runner 등록 공식 문서

GitLab CE install

개요

GitLab CE(Community Edition)는 자가 관리형(self-hosted) 오픈소스 Git 저장소 및 DevOps 플랫폼입니다. GitHub Actions와 유사한 CI/CD 파이프라인(GitLab CI)을 포함하며, 이슈 트래킹, MR(Merge Request), Container Registry, Wiki까지 하나의 서버에서 운영할 수 있습니다.

인터넷 연결이 제한된 내부망 환경이나 코드를 외부에 두기 어려운 보안 요건이 있는 조직에서 GitHub.com 대신 사용하는 사례가 많습니다. 이 글에서는 Ubuntu 22.04 환경에 GitLab CE 17.6.2를 Omnibus 패키지로 설치하는 전체 절차를 정리합니다.

권장 사양: CPU 4코어 이상, RAM 8GB 이상, 디스크 50GB 이상. Omnibus 패키지는 PostgreSQL, Redis, Nginx, Prometheus 등 GitLab의 모든 컴포넌트를 포함하므로 최소 3.7GB의 패키지 다운로드와 디스크 공간이 필요합니다.

OS: Ubuntu 22.04.3 LTS | GitLab: CE 17.6.2

OS 업데이트 및 의존성 패키지 설치

GitLab 설치 전 OS 패키지를 최신 상태로 업데이트하고, GitLab 설치 스크립트에 필요한 의존성 패키지를 설치합니다. ca-certificatescurl은 GitLab 패키지 저장소를 HTTPS로 추가할 때 필요하고, tzdata는 GitLab 내부의 시간대 처리에 사용됩니다.

<admin-user>@<server>:~$ sudo apt-get update
<admin-user>@<server>:~$ sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

sendmail 설치 (선택)

GitLab은 계정 인증, 비밀번호 재설정, 알림 등을 이메일로 발송합니다. 자체 메일 서버(Postfix)를 설치하거나, 나중에 /etc/gitlab/gitlab.rb에서 외부 SMTP 서버(Gmail, AWS SES 등)를 설정하는 방법 중 선택할 수 있습니다. 내부망 환경에서 별도 SMTP 서버가 있다면 이 단계를 건너뛰어도 됩니다.

<admin-user>@<server>:~$ sudo apt-get install -y postfix

GitLab 저장소 추가 및 패키지 설치

GitLab에서 제공하는 공식 설치 스크립트로 apt 저장소를 등록한 뒤 패키지를 설치합니다. EXTERNAL_URL 환경변수는 GitLab이 외부에서 접근되는 URL입니다. 이 값은 설치 후 /etc/gitlab/gitlab.rbexternal_url 항목에 저장되며 CI/CD 파이프라인의 클론 URL, 이메일 링크 등에 전반적으로 사용됩니다. 도메인이 없다면 http://서버IP:포트 형식으로 지정합니다.

패키지 크기가 약 1.3GB이므로 다운로드에 수 분이 소요됩니다. 설치 중 Omnibus Chef 레시피가 실행되면서 PostgreSQL 초기화, Nginx 설정, 서비스 기동까지 자동으로 처리됩니다.

<admin-user>@<server>:~$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
<admin-user>@<server>:~$ sudo EXTERNAL_URL="http://x.x.x.x:8081" apt-get install gitlab-ce

gitlab.rb 수정 및 서비스 재기동

설치 후 /etc/gitlab/gitlab.rb는 GitLab의 모든 설정을 관리하는 중앙 설정 파일입니다. external_url 외에도 SMTP 설정, LDAP 연동, 백업 경로, 이메일 발신자 등 수백 가지 옵션을 이 파일 하나에서 제어합니다. 변경 사항을 적용하려면 반드시 gitlab-ctl reconfigure를 실행해야 하며, 이 과정에서 Chef 레시피가 재실행되어 변경된 설정이 각 서비스 설정 파일에 반영됩니다.

vi /etc/gitlab/gitlab.rb
# external_url 항목 수정
external_url 'http://x.x.x.x:8081'

<admin-user>@<server>:~$ sudo gitlab-ctl reconfigure

초기 root 비밀번호 확인

설치 직후 GitLab은 임시 root 비밀번호를 /etc/gitlab/initial_root_password 파일에 저장합니다. 이 파일은 설치 후 24시간이 지나면 자동으로 삭제됩니다. 초기 로그인 후 즉시 Admin > Edit profile > Password에서 비밀번호를 변경하고, 변경 후에는 이 파일을 수동으로 삭제해도 됩니다.

sudo cat /etc/gitlab/initial_root_password

브라우저 접근 확인 및 초기 비밀번호 변경

브라우저에서 http://x.x.x.x:8081로 접속하여 GitLab 로그인 페이지가 표시되면 설치가 완료된 것입니다. root 계정으로 로그인 후 다음 순서로 초기 설정을 진행합니다.

  1. Admin > Edit profile > Password에서 초기 비밀번호 변경
  2. Admin Area > Settings > General에서 Sign-up 제한(내부망이면 비활성화 권장)
  3. 첫 번째 프로젝트(저장소) 생성 확인
GitLab CE 설치 완료 후 웹 브라우저 초기 접속 화면

참고

참고 문서: GitLab 패키지 설치 공식 문서 · GitLab Runner Docker 설치 문서