CI,  Docker Container

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 사용해보기

  • 로그인 완료 후 접속을 하게 되면 좌측 navi 바에서 프로젝트을 통해 해당 계정의 프로젝트 목록 확인할 수 있습니다
    • 프로젝트 선택 – Set Up Project
    • 프로젝트 연결 해제 – Unfollow Project
  • repository에 업로드 시 설정 파일이 실행될 브랜치를 지정합니다
  • 좌측 navi 바 > Dashboard > 선택한 프로젝트의 파이프 라인을 확인할 수 있습니다
    • 초기에는 작업 내역이 없으므로 아래 이미지와 같이 나올 수 있습니다 😀
  • 프로젝트 설정 화면은 우측 상단에서 버튼을 통해 이동할 수 있습니다
    • 환경변수 지정, 트리거 설정, API 권한 등의 설정이 가능합니다
  • github 업로드시 결과

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

실패 과정을 거치기도 합니다 😂

workflow에 들어가서 확인해보면 해당 오류를 확인해볼 수 있습니다

오류를 마주한다면 해결해야겠죠? 😄

끝~!


참고 자료

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.