CircleCI를 이용한 배포 자동화

2025. 2. 6. 02:03·Ops

개요

CircleCI를 활용하여 Docker 기반 Spring Boot app을 자동으로 빌드하고, Azure VM에 배포하는 CI/CD 파이프라인을 구축해보았습니다.

 

CircleCI의 장점

  1. 빠른 빌드 속도
  2. 설정이 간편함
  3. 자체 서버 없이 클라우드에서 CI/CD를 수행
  4. 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
'Ops' 카테고리의 다른 글
  • 메트릭 모니터링 환경 구축하기
  • Jenkins로 ci/cd 파이프라인 구축하기(3)
  • Jenkins로 ci/cd 파이프라인 구축하기(2)
  • Jenkins로 ci/cd 파이프라인 구축하기(1)
khjoon
khjoon
  • khjoon
    기록기록
    khjoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • Security (2)
      • Dev (14)
      • Infra (12)
      • Ops (9)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
khjoon
CircleCI를 이용한 배포 자동화
상단으로

티스토리툴바