GitLab은 소프트웨어 개발을 위한 통합 DevOps 플랫폼이다.
기본적으로 Git 저장소 관리 시스템으로 시작했지만, 현재는 전체 소프트웨어 개발 라이프사이클을 지원하는 포괄적인 도구로 발전했다.
.gitlab-ci.yml 파일로 간편한 파이프라인 구성# 필요한 의존성 설치
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 설정을 거치자
# 설정 파일 생성
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
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으로 접속하면 안전하게 연결되는 것을 확인할 수 있다.

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

Create New → New project/repository

Create blank project
Open image-20250404-053039.png

Project name과 Project URL을 입력해준다.
그 다음 대부분의 코드 작업은 대체로 Master-node에서 일어나기 때문에 osc-master-node에서 git 작업을 해준다.
$ 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되는것을 체크할 수 있다.

레이블 추가