CI/CD 파이프라인에서의 Harbor
물론입니다! 아래는 🔟 CI/CD 파이프라인에서의 Harbor 항목에 대해 마크다운 형식으로 작성한 강의용 포스팅 자료입니다. CI/CD에서 Harbor가 어떤 역할을 하며, 어떻게 연동되고 활용되는지 그림과 실습 예시까지 포함해 구성하였습니다.
1️⃣ GitHub Actions / GitLab CI에서 Harbor 연동
CI/CD 파이프라인의 핵심은 자동화된 빌드, 테스트, 배포입니다. Harbor는 이미지 저장소 역할을 하며, 빌드된 이미지를 안전하게 보관하고 다양한 정책 기반 접근 제어 및 보안 스캐닝을 지원합니다.
아래는 GitHub Actions와 GitLab 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를 중심으로 한 전체 이미지 파이프라인 흐름도입니다.
흐름 설명
- Git Push → 개발자가 코드 푸시
- CI 툴 (GitHub Actions / GitLab CI) 트리거
- Docker Build → 앱 컨테이너 이미지 생성
- Docker Push → Harbor Registry로 이미지 업로드
- 배포 트리거 (예: Argo CD, Helm)
- 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 환경을 강력히 지원합니다.
마지막 수정일자