CI/CD 파이프라인에서의 Harbor

CI/CD 파이프라인에서의 Harbor

물론입니다! 아래는 🔟 CI/CD 파이프라인에서의 Harbor 항목에 대해 마크다운 형식으로 작성한 강의용 포스팅 자료입니다. CI/CD에서 Harbor가 어떤 역할을 하며, 어떻게 연동되고 활용되는지 그림과 실습 예시까지 포함해 구성하였습니다.


1️⃣ GitHub Actions / GitLab CI에서 Harbor 연동

CI/CD 파이프라인의 핵심은 자동화된 빌드, 테스트, 배포입니다. Harbor는 이미지 저장소 역할을 하며, 빌드된 이미지를 안전하게 보관하고 다양한 정책 기반 접근 제어 및 보안 스캐닝을 지원합니다.

아래는 GitHub ActionsGitLab CI/CD가 Harbor와 어떻게 연동되는지를 보여주는 예시입니다.

1. GitHub Actions 연동 예제

# .github/workflows/deploy.yml
name: Build and Push to Harbor

on:
  push:
    branches: [ "main" ]

jobs:
  docker-build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Login to Harbor
      run: echo "${{ secrets.HARBOR_PASSWORD }}" | docker login harbor.example.com -u ${{ secrets.HARBOR_USERNAME }} --password-stdin

    - name: Build image
      run: docker build -t harbor.example.com/myproject/myapp:latest .

    - name: Push to Harbor
      run: docker push harbor.example.com/myproject/myapp:latest

2. GitLab CI 연동 예제

# .gitlab-ci.yml
stages:
  - build
  - push

build-image:
  stage: build
  script:
    - docker build -t harbor.example.com/myproject/myapp:$CI_COMMIT_SHORT_SHA .

push-image:
  stage: push
  script:
    - echo $HARBOR_PASSWORD | docker login harbor.example.com -u $HARBOR_USERNAME --password-stdin
    - docker push harbor.example.com/myproject/myapp:$CI_COMMIT_SHORT_SHA

2️⃣ 이미지 빌드 → 테스트 → Push → 배포 흐름

아래는 CI/CD에서 Harbor를 중심으로 한 전체 이미지 파이프라인 흐름도입니다.

CI/CD와 Harbor 흐름도

흐름 설명

  1. Git Push → 개발자가 코드 푸시
  2. CI 툴 (GitHub Actions / GitLab CI) 트리거
  3. Docker Build → 앱 컨테이너 이미지 생성
  4. Docker Push → Harbor Registry로 이미지 업로드
  5. 배포 트리거 (예: Argo CD, Helm)
  6. Kubernetes에 새로운 이미지 적용

3️⃣ 실습: Dockerfile + Harbor + Kubernetes 파이프라인 구성

간단한 Node.js 애플리케이션을 Harbor에 배포해보겠습니다.

1. Dockerfile 작성

# Dockerfile
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "index.js"]

2. GitHub Actions 설정

.github/workflows/deploy.yml 생성 (앞에서 설명한 예시 참고)

3. Kubernetes 배포 파일 (myapp-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: harbor.example.com/myproject/myapp:latest
        ports:
        - containerPort: 3000
kubectl apply -f myapp-deployment.yaml

4. HTTPS 설정된 Harbor에 Pull 허용

  • Kubernetes에 Harbor 인증서 등록 필요 (/etc/docker/certs.d/)
  • 또는 Insecure Registry로 설정 (개발환경 한정)

이와 같은 방식으로 CI/CD와 Harbor를 연동하면, 이미지 관리와 배포 자동화를 훨씬 더 신뢰성 있게 운영할 수 있습니다.

Harbor는 단순한 저장소 그 이상으로, 보안, 정책 기반 제어, 레플리케이션, CVE 스캐닝 등 엔터프라이즈급 기능을 통해 DevOps 환경을 강력히 지원합니다.


RSS Feed
마지막 수정일자