개요
CircleCI를 활용하여 Docker 기반 Spring Boot app을 자동으로 빌드하고, Azure VM에 배포하는 CI/CD 파이프라인을 구축해보았습니다.
CircleCI의 장점
- 빠른 빌드 속도
- 설정이 간편함
- 자체 서버 없이 클라우드에서 CI/CD를 수행
- Docker 및 Kubernetes 친화적
사용기술
- CI/CD 툴: CircleCI
- 소스 코드 저장소: GitHub
- 배포 환경: Azure VM + Docker
프로세스
GitHub에 코드 푸시 → 자동 빌드 → Docker 이미지 생성 → 서버에 자동 배포
CircleCI 계정 생성 및 GitHub 연동
회원가입 후 organization 생성후 프로젝트를 생성합니다.
github repo와 연동해줍니다.
선택한 repo가 추가되었습니다.
yml 파일을 생성해준다고 합니다.
setup을 완료하면 이렇게 브랜치가 생성되면서 yml 파일을 커밋해줍니다.
CircleCI에서 빌드를 확인할 수 있습니다.
Docker로 Spring API 서버 배포하기
Azure VM을 만들고 접속하는 방법은 생략하겠습니다.
Azure VM에 도커 먼저 설치해야 합니다.
ssh key를 생성하고 등록해줍니다.
Docker file을 작성해줍니다.
FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
config.yml 파일 작성하기
fingerprint는 ssh 키를 등록하고 나온 fingerprint 값을 넣어야 합니다.
version: 2.1
executors:
docker-executor:
docker:
- image: cimg/openjdk:17.0
working_directory: ~/project
jobs:
build:
executor: docker-executor
steps:
- checkout
- run:
name: Set up Gradle
command: |
chmod +x gradlew
./gradlew clean build
- persist_to_workspace:
root: .
paths:
- build/libs/*.jar
docker_build_and_push:
docker:
- image: circleci/python:3.9
environment:
DOCKER_IMAGE: hyoungjoon/my-spring-app:latest
steps:
- checkout
- attach_workspace:
at: ~/project
- setup_remote_docker
- run:
name: Build Docker image
command: |
docker build -t $DOCKER_IMAGE .
- run:
name: Push Docker image to DockerHub
command: |
echo "$DOCKERHUB_PASSWORD" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
docker push $DOCKER_IMAGE
deploy:
docker:
- image: circleci/python:3.9
steps:
- checkout
- add_ssh_keys:
fingerprints:
- "SHA256:o83purGnCNQQwFKH54ma3h2sxgHGpFGvnk9QYXjgt14"
- run:
name: Deploy to Azure VM
command: |
ssh -o StrictHostKeyChecking=no $AZURE_VM_USER@$AZURE_VM_IP \<<EOF
sudo docker pull hyoungjoon/my-spring-app:latest
sudo docker stop spring-app || true
sudo docker rm spring-app || true
sudo docker run -d --name spring-app -p 8080:8080 hyoungjoon/my-spring-app:latest
EOF
workflows:
version: 2
deploy_app:
jobs:
- build:
filters:
branches:
only:
- dev
- docker_build_and_push:
requires:
- build
filters:
branches:
only:
- dev
- deploy:
requires:
- docker_build_and_push
filters:
branches:
only:
- dev
CircleCI에 환경변수를 등록해줍니다.
config.yml에 workflows 작성해서 규칙을 정했습니다.
규칙은 github에 push를 하고 pr을 하면 자동으로 배포가 완료됩니다.
정상적으로 배포된 것을 확인할 수 있습니다!
'Ops' 카테고리의 다른 글
메트릭 모니터링 환경 구축하기 (0) | 2024.12.04 |
---|---|
Jenkins로 ci/cd 파이프라인 구축하기(3) (0) | 2024.12.04 |
Jenkins로 ci/cd 파이프라인 구축하기(2) (0) | 2024.12.04 |
Jenkins로 ci/cd 파이프라인 구축하기(1) (0) | 2024.12.04 |
k8s 환경에 내 서비스 띄워보기 (0) | 2024.12.04 |