Skip to content

pghoya2956/GitLab-Bulk-Manager

Repository files navigation

GitLab Bulk Manager

GitLab κ·Έλ£Ή 및 ν”„λ‘œμ νŠΈλ₯Ό λŒ€λŸ‰μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜

πŸš€ λΉ λ₯Έ μ‹œμž‘

# 개발 ν™˜κ²½ μ‹€ν–‰ (κΈ°λ³Έ, ν•«λ¦¬λ‘œλ“œ 지원)
docker compose up -d

# λΈŒλΌμš°μ €μ—μ„œ 접속
open http://localhost:3030

# ν”„λ‘œλ•μ…˜ ν™˜κ²½ μ‹€ν–‰
docker compose -f docker-compose.prod.yml up -d

πŸ“‹ μ£Όμš” κΈ°λŠ₯

λŒ€λŸ‰ μž‘μ—…

  • λŒ€λŸ‰ 생성: YAML ν…œν”Œλ¦ΏμœΌλ‘œ κ·Έλ£Ή/ν”„λ‘œμ νŠΈ 계측 ꡬ쑰 일괄 생성
  • λŒ€λŸ‰ 전솑: μ—¬λŸ¬ ν”„λ‘œμ νŠΈ/그룹을 λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ 일괄 이동
  • λŒ€λŸ‰ μ‚­μ œ: μ²΄ν¬λ°•μŠ€λ‘œ μ„ νƒν•œ ν•­λͺ©λ“€ 일괄 μ‚­μ œ (μ‹€μ‹œκ°„ μ§„ν–‰λ₯  ν‘œμ‹œ)
  • λŒ€λŸ‰ μ•„μΉ΄μ΄λΈŒ/볡원: ν”„λ‘œμ νŠΈ 일괄 μ•„μΉ΄μ΄λΈŒ 및 μ–Έμ•„μΉ΄μ΄λΈŒ
  • λŒ€λŸ‰ 볡제: ν”„λ‘œμ νŠΈ/κ·Έλ£Ή 일괄 볡사

μ„€μ • 관리

  • κ°€μ‹œμ„± λ³€κ²½: Public/Internal/Private 일괄 λ³€κ²½
  • CI/CD μ„€μ • 동기화: ν…œν”Œλ¦Ώ ν”„λ‘œμ νŠΈ 섀정을 λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ— 적용
  • κΆŒν•œ 관리: 멀버 κΆŒν•œ 일괄 μ„€μ • 및 λ³€κ²½
  • 이슈/MR 관리: μ΄μŠˆμ™€ λ¨Έμ§€ λ¦¬ν€˜μŠ€νŠΈ 일괄 생성/μˆ˜μ •

UI κΈ°λŠ₯

  • 트리 λ·°: GitLab ꡬ쑰λ₯Ό κ³„μΈ΅μ μœΌλ‘œ μ‹œκ°ν™”
  • μ²΄ν¬λ°•μŠ€ 선택: λΆ€λͺ¨-μžμ‹ 연동 닀쀑 선택
  • μ‹€μ‹œκ°„ μ§„ν–‰λ₯ : WebSocket을 ν†΅ν•œ μž‘μ—… μ§„ν–‰ 상황 ν‘œμ‹œ
  • μž‘μ—… νžˆμŠ€ν† λ¦¬: 졜근 μž‘μ—… λ‚΄μ—­ μžλ™ μ €μž₯ 및 ν‘œμ‹œ
  • 필터링: μ•„μΉ΄μ΄λΈŒλœ ν”„λ‘œμ νŠΈ 및 μ‚­μ œ μ˜ˆμ • κ·Έλ£Ή μžλ™ ν•„ν„°

πŸ—οΈ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

GitLab Bulk Manager
β”œβ”€β”€ Frontend (Port 3030)
β”‚   β”œβ”€β”€ React 18 + TypeScript
β”‚   β”œβ”€β”€ Material-UI v5
β”‚   β”œβ”€β”€ Redux Toolkit (μƒνƒœ 관리)
β”‚   β”œβ”€β”€ Socket.IO Client (μ‹€μ‹œκ°„ 톡신)
β”‚   └── Vite (λ²ˆλ“€λŸ¬)
β”‚
β”œβ”€β”€ Backend (Port 4050)
β”‚   β”œβ”€β”€ Node.js + Express (ES Modules)
β”‚   β”œβ”€β”€ Session 기반 인증
β”‚   β”œβ”€β”€ GitLab API ν”„λ‘μ‹œ
β”‚   β”œβ”€β”€ WebSocket μ„œλ²„
β”‚   └── Winston 둜거
β”‚
└── Redis (Port 6379)
    └── μ„Έμ…˜ μŠ€ν† λ¦¬μ§€

πŸ“¦ μ„€μΉ˜ 및 μ‹€ν–‰

Docker Compose μ‚¬μš© (ꢌμž₯)

# 1. μ €μž₯μ†Œ 클둠
git clone <repository-url>
cd gitlab-bulk-manager

# 2. 개발 ν™˜κ²½ μ‹€ν–‰ (κΈ°λ³Έ, ν•«λ¦¬λ‘œλ“œ 지원)
docker compose up -d
# - Backend: nodemon으둜 μžλ™ μž¬μ‹œμž‘
# - Frontend: Vite dev server둜 HMR 지원
# - μ½”λ“œ λ³€κ²½ μ‹œ μžλ™ 반영
# - 첫 μ‹€ν–‰ μ‹œ μžλ™μœΌλ‘œ npm install μˆ˜ν–‰

# 3. ν”„λ‘œλ•μ…˜ ν™˜κ²½ μ‹€ν–‰
docker compose -f docker-compose.prod.yml up -d
# - μ΅œμ ν™”λœ λΉŒλ“œ (Multi-stage Docker build)
# - Frontend: Nginx둜 정적 파일 μ„œλΉ™
# - Backend: Node.js ν”„λ‘œλ•μ…˜ λͺ¨λ“œ
# - λ³΄μ•ˆ κ°•ν™” (non-root user)

# 4. μƒνƒœ 확인
docker compose ps
docker compose logs -f  # μ‹€μ‹œκ°„ 둜그
docker compose logs -f backend  # Backend 둜그만
docker compose logs -f frontend  # Frontend 둜그만

# 5. 쀑지
docker compose down
# λ³Όλ₯¨ 포함 μ‚­μ œ: docker compose down -v

μˆ˜λ™ μ„€μΉ˜ (Docker 없이)

# 1. Redis μ„€μΉ˜ 및 μ‹€ν–‰ (ν•„μˆ˜)
redis-server

# 2. Backend μ‹€ν–‰
cd backend
npm install
npm run dev  # 개발 λͺ¨λ“œ (nodemon)
# λ˜λŠ”
npm start    # ν”„λ‘œλ•μ…˜ λͺ¨λ“œ

# 3. Frontend μ‹€ν–‰ (μƒˆ 터미널)
cd frontend
npm install
npm run dev  # 개발 μ„œλ²„ (Vite HMR)
# λ˜λŠ”
npm run build && npm run preview  # ν”„λ‘œλ•μ…˜ λΉŒλ“œ

πŸ”§ ν™˜κ²½ μ„€μ •

Backend ν™˜κ²½ λ³€μˆ˜ (backend/.env)

# μ„œλ²„ μ„€μ •
PORT=4050                    # Backend 포트 (기본: 4050)
NODE_ENV=development         # ν™˜κ²½ (development/production)

# μ„Έμ…˜ μ„€μ •
SESSION_SECRET=your-secret-here  # μ„Έμ…˜ μ•”ν˜Έν™” ν‚€ (ν•„μˆ˜)

# Redis μ„€μ • (선택사항)
REDIS_URL=redis://localhost:6379
REDIS_PASSWORD=your_redis_password

# CORS μ„€μ •
FRONTEND_URL=http://localhost:3030

# Rate Limiting
RATE_LIMIT_WINDOW_MS=900000    # 15λΆ„
RATE_LIMIT_MAX_REQUESTS=100    # μ΅œλŒ€ μš”μ²­ 수

# λ‘œκΉ…
LOG_LEVEL=info                  # debug, info, warn, error

Frontend ν™˜κ²½ λ³€μˆ˜ (frontend/.env)

# API μ„€μ •
VITE_API_URL=http://localhost:4050

# WebSocket μ„€μ •
VITE_WS_URL=ws://localhost:4050
VITE_ENABLE_WEBSOCKET=true      # μ‹€μ‹œκ°„ μ§„ν–‰λ₯  ν™œμ„±ν™”

# μ•± μ„€μ •
VITE_APP_NAME=GitLab Bulk Manager
VITE_APP_VERSION=1.0.0

πŸ“– λ¬Έμ„œ

μžμ„Έν•œ λ¬Έμ„œλŠ” docs 폴더λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”:

πŸ› οΈ 개발

개발 ν™˜κ²½ μ‹€ν–‰

# Docker Compose둜 개발 ν™˜κ²½ μ‹€ν–‰ (κΈ°λ³Έκ°’)
docker compose up -d

# 변경사항이 μžλ™μœΌλ‘œ 반영됨:
# - Backend: nodemon이 파일 λ³€κ²½ κ°μ§€ν•˜μ—¬ μžλ™ μž¬μ‹œμž‘
# - Frontend: Vite HMR둜 μ¦‰μ‹œ 반영
# - λ³Όλ₯¨ 마운트둜 둜컬 μ½”λ“œμ™€ μ»¨ν…Œμ΄λ„ˆ 동기화

# λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰ λŒ€μ‹  둜그 보기
docker compose up  # Ctrl+C둜 μ’…λ£Œ

ν…ŒμŠ€νŠΈ μ‹€ν–‰

# μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ ν…ŒμŠ€νŠΈ μ‹€ν–‰
docker compose exec backend npm test
docker compose exec frontend npm test

# λ˜λŠ” λ‘œμ»¬μ—μ„œ 직접 μ‹€ν–‰
cd backend && npm test
cd frontend && npm test

μ½”λ“œ ν’ˆμ§ˆ 검사

# μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰
docker compose exec backend npm run lint:fix
docker compose exec frontend npm run lint:fix

# Frontend ν¬λ§·νŒ…
docker compose exec frontend npm run format

πŸ”’ λ³΄μ•ˆ κΈ°λŠ₯

  • 토큰 λ³΄μ•ˆ: GitLab Personal Access Token은 μ„œλ²„ μ„Έμ…˜μ—λ§Œ μ €μž₯
  • μ„Έμ…˜ μ•”ν˜Έν™”: Redis에 μ•”ν˜Έν™”λœ μ„Έμ…˜ 데이터 μ €μž₯
  • HTTPS 지원: ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ HTTPS μ‚¬μš© ꢌμž₯
  • Rate Limiting: API μš”μ²­ μ œν•œμœΌλ‘œ λ‚¨μš© λ°©μ§€
  • CORS μ„€μ •: ν—ˆμš©λœ 좜처만 API μ ‘κ·Ό κ°€λŠ₯
  • μž…λ ₯ 검증: λͺ¨λ“  μ‚¬μš©μž μž…λ ₯ 검증 및 sanitize

πŸš€ 졜근 κ°œμ„ μ‚¬ν•­ (2025-01-11)

  1. API λΌμš°ν„° 톡합: μ€‘λ³΅λœ bulkActions.js 제거, bulk.js둜 일원화
  2. μ„Έμ…˜ ν‚€ 톡일: λͺ¨λ“  νŒŒμΌμ—μ„œ req.session.gitlabToken μ‚¬μš©
  3. μ‹€μ‹œκ°„ μ§„ν–‰λ₯ : WebSocket을 ν†΅ν•œ λŒ€λŸ‰ μž‘μ—… μ§„ν–‰ 상황 ν‘œμ‹œ
  4. API 경둜 μˆ˜μ •: /api/gitlab/bulk/* 경둜둜 톡일
  5. UI κ°œμ„ : μ²΄ν¬λ°•μŠ€ 선택, μž‘μ—… νžˆμŠ€ν† λ¦¬, μžλ™ 펼침 κΈ°λŠ₯

πŸ“ λΌμ΄μ„ μŠ€

MIT License

🀝 κΈ°μ—¬ 방법

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ†˜ 문제 ν•΄κ²°

자주 λ°œμƒν•˜λŠ” 문제

포트 좩돌 문제

# 포트 μ‚¬μš© 쀑인 ν”„λ‘œμ„ΈμŠ€ 확인
lsof -i :3030  # Frontend
lsof -i :4050  # Backend

# Docker μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘
docker compose down
docker compose up -d

μ˜μ‘΄μ„± μ„€μΉ˜ μ‹€νŒ¨

# Docker λ³Όλ₯¨κ³Ό node_modules μž¬μƒμ„±
docker compose down -v
docker compose up -d --build

μ„Έμ…˜ μœ μ§€ μ•ˆλ¨

  • SESSION_SECRET ν™˜κ²½ λ³€μˆ˜ μ„€μ • 확인
  • Redis μ—°κ²° μƒνƒœ 확인
  • λΈŒλΌμš°μ € μΏ ν‚€ μ„€μ • 확인

πŸ“š μΆ”κ°€ λ¦¬μ†ŒμŠ€

About

GitLab Bulk Manager

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors