GitLab 설치

장쿠배·2025년 5월 25일

GitLab + Nexus CI/CD

목록 보기
1/1

GitLab

GitLab은 소프트웨어 개발을 위한 통합 DevOps 플랫폼이다.

기본적으로 Git 저장소 관리 시스템으로 시작했지만, 현재는 전체 소프트웨어 개발 라이프사이클을 지원하는 포괄적인 도구로 발전했다.

주요 특징

  1. 코드 저장소 관리
    • Git 기반 소스 코드 관리
    • 브랜치 관리 및 병합 요청(Merge Request) 워크플로우
    • 코드 리뷰 및 협업 기능
  2. CI/CD 파이프라인
    • 내장된 지속적 통합/지속적 배포(CI/CD) 도구
    • 자동화된 빌드, 테스트, 배포 프로세스
    • .gitlab-ci.yml 파일로 간편한 파이프라인 구성
  3. 프로젝트 관리
    • 이슈 추적 및 관리
    • 칸반 보드 및 마일스톤
    • 시간 추적 및 보고
  4. 보안 및 규정 준수
    • 코드 스캐닝 및 취약점 분석
    • 의존성 스캐닝
    • 컨테이너 스캐닝
  5. 인프라스트럭처 관리
    • 쿠버네티스 통합
    • 환경 모니터링
    • 서버리스 배포

설치

GitLab Omnibus

패키지 저장소 추가 및 설치

# 필요한 의존성 설치
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates perl
# GitLab 패키지 저장소 추가
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
# GitLab 설치 (root 비밀번호와 URL 설정)
sudo GITLAB_ROOT_EMAIL="admin@example.com" GITLAB_ROOT_PASSWORD="your_strong_password" EXTERNAL_URL="http://gitlab.example.com" apt-get install gitlab-ee

GitLab 공식문서를 참조하여 해당 설치 명령어를 입력한다

서비스 상태 확인

sudo gitlab-ctl status

192.168.31.162 → 브라우저 접속

로그인 창이 성공적으로 나오면 GitLab 설치가 완성된 것

아직은 SSL 인증서를 추가해주지 않았기 때문에 일반 http로 접속이 된다

이는 보안에 위험이 될 가능성이 높기 때문에 아래에 있는 https 설정을 거치자

HTTPS(SSL)

# 설정 파일 생성
sudo bash -c 'cat > /tmp/ip_san.cnf << EOL
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = 192.168.31.162
[v3_req]
basicConstraints = CA:TRUE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.31.162
EOL'
# 인증서 생성
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
  -keyout /etc/gitlab/ssl/gitlab_ip.key \
  -out /etc/gitlab/ssl/gitlab_ip.crt \
  -config /tmp/ip_san.cnf -extensions v3_req
# 권한 설정
sudo chmod 600 /etc/gitlab/ssl/gitlab_ip.key
sudo chmod 644 /etc/gitlab/ssl/gitlab_ip.crt

GitLab 설정 업데이트

sudo vi /etc/gitlab/gitlab.rb

다음 내용 추가

external_url 'https://192.168.31.162'
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab_ip.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab_ip.key"

설정 적용

sudo gitlab-ctl reconfigure

이 과정까지 마치고 나면 발급받은 SSL 인증서를 GitLab이 인식하기 때문에 https로 접속이 되는걸 확인가능하다.

하지만 접속 시 보안되지 않은 인증서라고 경고문이 뜨기 때문에 마찬가지로 방금 발급받았던 ssl 인증서를 윈도우 클라이언트에 추가해주어야 한다.

sudo cp /etc/gitlab/ssl/gitlab_ip.crt /tmp/
sudo chmod 644 /tmp/gitlab_ip.crt

발급받았던 인증서를 tmp 디렉토리로 복사 후 파일을 윈도우로 전송해줘야 한다.

(WinSCP와 같은 프로그램 사용)

Windows에서 인증서 설치과정

  • 인증서 파일 더블 클릭
  • "인증서 설치" 클릭
  • "로컬 컴퓨터" 선택 → "다음"
  • "모든 인증서를 다음 저장소에 저장" 선택
  • "찾아보기" → "신뢰할 수 있는 루트 인증 기관" 선택
  • "확인" → "다음" → "마침"

그 후 다시 GitLab으로 접속하면 안전하게 연결되는 것을 확인할 수 있다.

GitLab Test

로그인

브라우저에서 https://192.168.31.162 접속:

  • 사용자명: root
  • 비밀번호: 설치 시 지정한 비밀번호

Create New → New project/repository

Create blank project

Open image-20250404-053039.png

Project name과 Project URL을 입력해준다.

그 다음 대부분의 코드 작업은 대체로 Master-node에서 일어나기 때문에 osc-master-node에서 git 작업을 해준다.

Git 리포지토리 클론 및 코드 푸시(Master-Node)

$ git -c http.sslVerify=false clone https://192.168.31.162/root/kubernetes-manifests.git
Cloning into 'kubernetes-manifests'...
Username for 'https://192.168.31.162': root
Password for 'https://root@192.168.31.162':
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (3/3), done.
$ cd kubernetes-manifests/

먼저 git clone으로 방금 생성한 프로젝트를 master-node에 복사해준후 해당 디렉토리로 이동해준다

$ git add .
$ git commit -m "first"
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
$ git -c http.sslVerify=false push origin main
Username for 'https://192.168.31.162': root
Password for 'https://root@192.168.31.162':
Everything up-to-date

먼저 git add와 git commit을 해준 후 git push 명령어 작업을 수행하게 되면 username과 password를 입력한다.

현재는 변경된 내역이 없어서 아무것도 push를 하지 않고있다.

이번에는 manifest 파일을 추가해주어서 한번 push를 해보자.

bear@osc-master-node:~/kubernetes-manifests$ cat > nginx-deployment.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
EOF
bear@osc-master-node:~/kubernetes-manifests$ cat > README.md << EOF
# 쿠버네티스 매니페스트 저장소
이 저장소는 쿠버네티스 배포를 위한 매니페스트 파일을 포함하고 있습니다.
## 포함된 파일
- nginx-deployment.yaml: NGINX 웹 서버 배포 정의
EOF

해당 파일들을 추가 한 후 gitlab으로 push 작업을 거치면

bear@osc-master-node:~/kubernetes-manifests$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        nginx-deployment.yaml
no changes added to commit (use "git add" and/or "git commit -a")
bear@osc-master-node:~/kubernetes-manifests$ git add nginx-deployment.yaml README.md
bear@osc-master-node:~/kubernetes-manifests$ git commit -m "Added nginx deployment manifest"
[main 754a517] Added nginx deployment manifest
 2 files changed, 27 insertions(+), 93 deletions(-)
 rewrite README.md (99%)
 create mode 100644 nginx-deployment.yaml
bear@osc-master-node:~/kubernetes-manifests$ git -c http.sslVerify=false push origin main
Username for 'https://192.168.31.162': root
Password for 'https://root@192.168.31.162':
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 2 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 658 bytes | 658.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
To https://192.168.31.162/root/kubernetes-manifests.git
   59d1b13..754a517  main -> main

정상적으로 code가 push되는것을 체크할 수 있다.

레이블 추가

profile
Kubernetes/AmazonAWS를 위한 나의 기록

0개의 댓글