[CI/CD] CircleCI 도입일지_v1

박일우·2023년 3월 6일
6

ci/cd

목록 보기
1/2

현재 재직중인 회사에 Devops 인프라가 구축이 되어 있지 않아, 많은 작업들(빌드 작업, 배포 작업, 인식률 스크립트 등등..)을 일일히 수작업으로 진행하고 있었습니다.
계속 차일피일 미루고 미루다, 새로오신 PM님의 권고로 CI/CD 작업을 진행하기로 하였습니다.
백엔드팀에서 전담하여 진행하기로 하였고 이전 Jenkins 구축도 재밌게 하였고 CI/CD는 연동하는 재미가 있어서 먼저 "제가 해보겠습니다!" 하고 손을 번쩍들어 전담을 맞게 되었습니다....
(Nooooooooo.. Stayyyyyyy!)

기존에 팀리드께서 CI/CD 구축을 위해 여러가지 툴(Jenkins, CircleCI, github actions, travis)들을 비교 하였고 그 중 CircleCI를 사용하기로 하였습니다.

❓ CircleCI란?

CircleCI는 GitHub, GitHub Enterprise 및 Atlassian Bitbucket 저장소를 모니터링하고 새 커밋에 대한 빌드를 론칭한다.[19] CircleCI는 도커(Docker) 컨테이너 또는 가상 시스템에서 빌드를 자동으로 테스트하고 패싱 빌드를 대상 환경에 배포한다. 대시보드 및 API를 통해 빌드의 상태와 빌드와 관련된 지표를 추적할 수 있으며 문제가 발생할 경우 통합된 슬랙(Slack)을 통해 팀에 통지한다.

SSH를 지원하므로 로컬에서 작업을 실행할 수 있으며 보안 조치를 통해 템퍼링을 방지할 수 있다.[17] CircleCI는 수동으로 승인될 때까지 작업을 일시 중지하는 워크플로 승인 기능도 제공한다.[20]

CircleCI는 GoJavaRubyPythonScalaNode.jsPHP하스켈을 비롯하여 Linux 또는 macOS에서 실행되는 기타 모든 언어를 지원한다.

CircleCI는 관리형 클라우드 서비스를 제공하며 무료 티어도 이용할 수 있다. CircleCI 플랫폼은 사설 서버(기업 방화벽 내)를 이용한 자체 호스팅 또는 클라우드에서 프라이빗 배포를 통해 이용할 수 있다. 클라우드 서비스는 처음에는 자체적으로 개발되었지만 지금은 HashiCorp의 Nomad와 쿠버네티스(Kubernetes)를 사용한다.

CircleCI는 지속적인 테스트 및 릴리스를 통해 위험을 줄이며 관리형 클라우드 서비스를 통해 CI 인프라 유지 관리 및 프로비저닝을 담당한다. 클라우드 서비스는 몇 분 안에 설정할 수 있지만 사용자 정의는 Jenkins보다 적게 허용된다. - 위키백과 발췌 -


좀더 개발자 차원에서 풀어보자면, 협업 진행시 혼자 개발을 하지 않으므로 대부분의 프로젝트에서 형상관리(Configuration Management)툴을 사용을 하는게 일반적입니다. 이렇다보니 같은 프로젝트에서도 소스 코드 및 파일들이 중구난방으로 관리 되지 못하는 경우가 많은데 이때 지속적인통합(Continuous Integration)을 구현하여 프로젝트의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유된 레포지토리에 병합이 됩니다. 그리고 이러한 지속적인통합으로 병합된 공유리포지토리에서 실제 고객이 사용 가능한 프로덕트 환경까지 자동으로 배포하는 지속적인배포(Continuous Deployment)를 제공하는 플랫폼이 바로 CircleCI입니다.

CI/CD의 아버지라 불리우는 Jenkins에 비하여 초기 설정이나 운영하면서 생기는 리소스 관리 차원에서 훨씬 간편하고 효율적이라 할 수 있습니다.

👉 CircleCI 시작하기

  • CircleCI 가입
    https://circleci.com/signup/ 에 접속하여 Email, GitHub, GitLab, Bitbucket중 하나를 선택하여 가입을 진행하면 됩니다. GitHub 가입의 경우 모든 저장소를 할지 Public 저장소만 할지 정할 수 있습니다! 여기선 GitHub로 진행하겠습니다.



  • 프로젝트 설정
    가입을 완료하여 로그인하면 Web-Dashboard 화면을 확인할 수 있습니다.
    좌측 배너에서 'Projects'를 클릭해주신 후 github repository중 하나를 선택하여 'Set up Project'를 클릭합니다.


    그 후 CircleCI에서 사용되는 config.yml 파일을 선택하는 창이 나옵니다. 순서대로
    • Fastest: .circleci/config.yml을 사용합니다. 해당 경로의 파일이 있는 branch 값을 입력해야 합니다.
    • Faster: 새로운 branch에 starter용 ci pipline을 commit 합니다.
    • Fast: 수정할 수 있는 기본 config.yml을 전달 받습니다.(circleci 공식홈페이지 추천방식)
      저는 Faster 방식으로 진행 하겠습니다.

      해당 방식으로 set up을 진행하면 잠깐의 로딩 후 Dashboard 화면으로 이동하고 처음보는 두개의 pipline 결과들을 확인 할 수 있습니다.

      gihub에서 해당 repository를 가보면 'circleci-project-setup'이라는 branch가 만들어져 있고 'Add .circleci/config.yml' commit message와 함께 .circleci/config.yml이 만들어진걸 확인 할 수 있습니다.
      github에서 .circleci/config.yml파일을 아래와 같이 변경 후 commit을 해보겠습니다.

      다시 circleci 페이지로 이동을 하면 Dashboard 화면에 하나의 결과가 추가되었고 github에서 commit한 commit title을 확인할 수 있습니다.

      그 후, say-hello-workflow을 클릭하고 등록된 job인 say-hello를 클릭하면 commit한 내용인 steps > run > name의 값과 command로 명령어의 결과를 확인 할 수 있습니다.

이로써 circleci와 github을 연동에 성공 하였습니다! 다음에는 circleci에서 사용되는 용어에 대한 개념을 정리 해보겠습니다!

profile
열정!열정!열정!

3개의 댓글

comment-user-thumbnail
2023년 3월 16일

다음꺼 언제 나오나요?

1개의 답글