CI – Circle CI 사용법
CI/CD 란?
CI는 지속적인 통합(Continuous Integration) 을 말하며 CI를 통해 개발자 각자가 개발한 구현 기능을 공유 브랜치에 통합하고 통합한 코드를 빌드 및 테스트하여 버그 발생 시 수정을 후 다시 통합을 진행함으로써 품질을 보다 더 안정적으로 관리할 수 있습니다.
CD는 위의 CI를 통해 신뢰성을 갖춘 있는 소프트웨어를 github와 같은 형상관리 저장소에 자동으로 업로드하는 지속적 제공(Continuous Delivery) 과 사용자가 사용하는 프로덕션 환경까지 릴리즈하는 지속적 배포(Continuous Deployment) 를 말합니다. 또한 이러한 관리 과정은 수식어에 맞게 지속적이어야 합니다.
프로젝트의 크기가 커질수록 각 과정의 수동 작업의 시간이 오래 걸리게 되므로 자동화되어야 하며 Circle CI는 이러한 CI/CD를 돕기 위한 플랫폼입니다.
Circle CI 설정 파일
- Circle CI 설정 파일의 경로 및 파일명
- 경로 – ./circleci
- 파일명 – config.yml
- Orbs
- 프로젝트 내에서 혹은 프로젝트 간의 재사용 가능한 구성 패키지
- 예를 들어 AWS S3 구성 내용을 직접 작성할 수도 있지만 구성 패키지로 가져와서 쉽고 간단하게 구성 가능
- Circle CI Developer 를 통해 관련 Orbs를 검색 및 참고
- Jobs (작업)
- 작업의 용도별로 분리하여 진행 가능
- 단계(step) 모음
- step – 작업 중 실행 가능한 명령 모음
- 새 컨테이너 또는 VM 내에서 단일 장치에서 실행
- docker를 통해 원하는 컨테이너 이미지를 환경으로 적용 가능
- Circle CI Developer를 통해 관련 이미지를 검색 및 참고
- Workflows
- CI/CD 과정의 흐름 및 조건을 지정
- requires – 해당 태그 실행 전 선행 태그
- filters – 해당 태그를 실행하는 조건
- name – 실행되는 해당 태그를 naming
- matrix – 서로 다른 인자 값을 매개변수 적용 (동일 태그를 매개변수의 조건에 따라 여러 번 적용 가능)
- jobs의 태그를 명시하지 않는다면 실행되지 않음
- config.yml 예시
version: 2.1
orbs:
aws-eb: circleci/aws-elastic-beanstalk@2.0.1
aws-s3: circleci/aws-s3@3.0
jobs:
docker-build:
docker:
- image: cimg/base:2022.02
steps:
- checkout
- setup_remote_docker:
version: 20.10.11
docker_layer_caching: true
- run:
name: Operation Docker Image Build
command: |
echo "Build Start"
docker build -t $DOCKER_HUB_ID/docker-jpro-blog ./jpro-blog
docker build -t $DOCKER_HUB_ID/docker-jpro-profile ./jpro-profile
docker build -t $DOCKER_HUB_ID/docker-jpro-nginx ./nginx
- run:
name: Image DockerHub Push
command: |
echo "$DOCKER_HUB_PASSWORD" | docker login -u "$DOCKER_HUB_ID" --password-stdin
docker push $DOCKER_HUB_ID/docker-jpro-blog
docker push $DOCKER_HUB_ID/docker-jpro-profile
docker push $DOCKER_HUB_ID/docker-jpro-nginx
eb-demo:
docker:
- image: circleci/python:3.7.7
steps:
- checkout
- run:
name: installing aws dependencies
command: |
sudo pip install --upgrade setuptools
sudo pip install awsebcli --upgrade
- run:
name: deploying
command: |
export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
eb init --platform 'Docker running on 64bit Amazon Linux 2' --region $AWS_REGION $EB_APP_NAME
eb use $EB_ENV_NAME
eb deploy $EB_ENV_NAME --message $CIRCLE_BUILD_NUM
workflows:
docker-workflow:
jobs:
- docker-build:
name: docker-build-v<< matrix.version >>
filters:
branches:
only:
- main
matrix:
parameters:
version: ["0.1", "0.2"]
- eb-demo:
requires:
- docker-build
filters:
branches:
only:
- main
Circle Ci 사용해보기
- Circle CI 접속 – Go to Application

- 로그인 완료 후 접속을 하게 되면 좌측 navi 바에서 프로젝트을 통해 해당 계정의 프로젝트 목록 확인할 수 있습니다
- 프로젝트 선택 – Set Up Project
- 프로젝트 연결 해제 – Unfollow Project

- repository에 업로드 시 설정 파일이 실행될 브랜치를 지정합니다

- 좌측 navi 바 > Dashboard > 선택한 프로젝트의 파이프 라인을 확인할 수 있습니다
- 초기에는 작업 내역이 없으므로 아래 이미지와 같이 나올 수 있습니다 😀

- 프로젝트 설정 화면은 우측 상단에서 버튼을 통해 이동할 수 있습니다
- 환경변수 지정, 트리거 설정, API 권한 등의 설정이 가능합니다


- github 업로드시 결과

와 같이 성공하면 좋겠지만~

실패 과정을 거치기도 합니다 😂
workflow에 들어가서 확인해보면 해당 오류를 확인해볼 수 있습니다
오류를 마주한다면 해결해야겠죠? 😄

끝~!