Daily log

GitLab 설치 및 Spring Boot 배포 방법 정리


개발 환경

  • 운영체제: Ubuntu 20.04 LTS (Server Edition)
  • GitLab 버전: gitlab-ce
  • Java: OpenJDK 17 (temurin17)
  • 빌드 도구: Gradle (Toolchain 지원)
  • Spring Boot: 2.x 이상 (Jar 배포 기반)
  • GitLab Runner: Docker 또는 Shell executor 사용
  • 배포 방식: Systemd 서비스 및 쉘 스크립트 기반 무중단 배포
  • CI/CD: .gitlab-ci.yml 기반 자동화
  • 방화벽 관리: ufw
  • 포트 확인: lsof, pkill, netstat
  • 로그 관리: nohup, logs 디렉토리 내 파일 저장

1. GitLab Community Edition 설치

# 시스템 업데이트
sudo apt update && sudo apt upgrade -y

# 의존성 설치
sudo apt install -y ca-certificates curl openssh-server

# GitLab 설치
sudo apt install -y gitlab-ce

# GitLab 접속 설정 변경
sudo vi /etc/gitlab/gitlab.rb
# => external_url 'http://<IP>:<PORT>'

# 설정 적용
sudo gitlab-ctl reconfigure

# 초기 root 비밀번호 확인
sudo cat /etc/gitlab/initial_root_password

2. GitLab 버전 체크 비활성화

GitLab Admin Area > Settings > Metrics and profiling > Usage statistics > "Enable version check" 비활성화


3. Spring Boot 배포 방식

3-1. GitLab CI 파이프라인 .gitlab-ci.yml 작성

  • 프로젝트 루트에 .gitlab-ci.yml 작성
  • 필요한 stage, script, artifacts 지정

3-2. 배포 스크립트 (deploy.sh) 작성

  • jar 백업 및 교체, 애플리케이션 종료 및 재시작 포함
  • 로그 디렉토리, PID 파일 등 설정 포함

예시:

#!/bin/bash
MODULE_NAME="bizcof-mes-app"
APP_DIR="/app/$MODULE_NAME"
JAR_NAME="$MODULE_NAME-0.0.1-SNAPSHOT.jar"
BACKUP_DIR="$APP_DIR/backups"
LOG_DIR="$APP_DIR/logs"
DATE=$(date +"%Y-%m-%d")
BACKUP_PATH="$BACKUP_DIR/$JAR_NAME-$DATE"
PID_FILE="$APP_DIR/$MODULE_NAME.pid"

mkdir -p $BACKUP_DIR $LOG_DIR

if [ -f "$APP_DIR/$JAR_NAME" ]; then
  cp "$APP_DIR/$JAR_NAME" "$BACKUP_PATH"
fi

pkill -f "java -jar $APP_DIR/$JAR_NAME"
sleep 5

lsof -Pi :20011 -sTCP:LISTEN -t && pkill -9 -f "java -jar $APP_DIR/$JAR_NAME"

nohup java -Dspring.profiles.active=develop -Dspring.pid.file=$PID_FILE -jar "$APP_DIR/$JAR_NAME" >> "$LOG_DIR/$MODULE_NAME.log" 2>&1 &
echo $! > $PID_FILE

3-3. systemd 서비스 등록

서비스 유닛 파일 예시:

[Unit]
Description=BIZCOF-MES Application
After=network.target

[Service]
Type=forking
WorkingDirectory=/app/servers/bizcof-mes-app/
ExecStart=/app/servers/bizcof-mes-app/deploy.sh daemon

User=gitlab-runner
Group=gitlab-runner
PIDFile=/app/servers/bizcof-mes-app/bizcof-mes-app.pid
Restart=on-failure
TimeoutSec=60

[Install]
WantedBy=multi-user.target

등록:

sudo ln -s /app/servers/bizcof-mes-app/bizcof-mes-app.service /etc/systemd/system/bizcof-mes-app.service
sudo systemctl daemon-reload

4. 이슈 해결

4-1. JAVA_COMPILER toolchain 오류

sudo mkdir -p /opt/temurin17 && cd /opt/temurin17
sudo wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz
sudo tar -xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz
sudo mv jdk-17.0.10+7 jdk-17

4-2. bootJar 에러: settings.gradle 중복

  • 하위 모듈에 불필요한 settings.gradle 파일이 존재하면 삭제 필요

5. 점검 항목

  • GitLab runner online 상태 확인
  • systemd 등록 여부 확인
  • 권한 문제 확인 (스크립트, 실행 경로, jar 접근권한 등)
  • 로그 확인 및 GPT로 이슈 파악

공유하기

facebook twitter kakaoTalk kakaostory naver band