Github Actions로 CI / CD 구축하기 시리즈 시작

yujuck·2024년 1월 9일
0

CI CD 구축하기

목록 보기
1/6
post-thumbnail
post-custom-banner

AS-IS

그동안 운영하고 있는 프로젝트들의 빌드와 배포는 다음처럼 진행하고 있었다.

  • Meteor.js로 만들어진 프로젝트는 pm2-meteor로 빌드/배포
  • (우리팀 한정) 몇몇 개의 프로젝트는 dev 브랜치에 push되었을 땐 자동으로 배포될 수 있는 어플리케이션을 만들어 서버에 띄워놓고 사용
  • 그 외에는 쉘 스크립트로 압축 -> 서버로 전송 -> 서버에서 압축 해제 -> 실행 의 단계를 거쳐 진행

이번에 기존 서비스를 아예 새로운 기술 스택으로 변경함과 동시에 서비스 자체도 리뉴얼하는, 개발팀 및 디자인팀, 생산팀 모두 새롭게 프로세스를 정비하는 프로젝트를 시작하게 되었는데 이번 기회에 배포 프로세스도 docker를 사용한 자동 배포를 적용해보고 싶어 배포 환경을 구축해보고 있다.

배포 자동화는 사실 이전부터 적용을 하고 싶었다. 프로젝트마다 배포 쉘 스크립트를 따로 만들어서 관리를 하고 있어야 하고 (심지어 개인마다 로컬 폴더 구조가 다르기 때문에 공유도 안됨) 특정인이 담당해서 배포를 해야하는 상황이 좀 불편했다. 다른 작업을 진행하는 와중에 배포를 해야하는 것이, 물론 오래 걸리는 일은 아니지만 짧게나마 집중력이 흐트러뜨리기도 했다.

개발팀에 내에 docker를 사용해본 사람도 없고, CI / CD 파이프라인 구축 경험치도 없기 때문에 처음부터 해보기 딱 좋은 상황이라 개인적 욕심 + 개발팀 모두가 배포에 시간을 쏟지 않길 바라는 마음으로 한단계씩 진행해보려고 한다.

CI / CD ?

우선 CI와 CD가 뭔지 간단하게 알고 가는게 좋을 것 같다!

CI (Continuous Integration)

CI는 지속적인 통합이라는 의미인데, 빌드와 테스트를 자동화하는 과정이다. 새로운 코드 변경 사항이 생기면 자동으로 빌드, 테스트까지 진행한 후 문제가 없으면 통합시키는 단계라고 생각하면 될 것 같다.

사실 지금 팀에서 그동안은 테스트 코드를 작성하고 있지 않았어서 만약에 CI를 하려고 했었어도 테스트 과정이 없는 CI가 되었을텐데 이번엔 테스트 코드도 작성하려고 하고 있다. 제대로 된 CI가 되겠구만..!

CD (Continuous Delivery / Continuous Deployment)

CD는 지속적인 서비스 제공 및 지속적인 배포를 의미한다. CI가 잘 끝났다는건 배포해도 되는 코드를 의미하기 때문에 CD는 자동으로 서버에 배포하는 작업을 하는 단계라고 생각하면 된다.

기존에 dev 브랜치에 PR이 merge되면 해당 코드를 수동으로 배포했던 과정을 CD를 적용함으로써 배포에 덜 신경쓸 수 있을 것 같다.. 신난다!

Github Actions

CI / CD 파이프라인을 구축하는 도구로는 jenkins가 가장 많이 사용되고 있는 것 같은데 jenkins 대신 Github Actions를 선택했다.

Github Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼이라고 공식 문서에서 설명하고 있다.

jenkins 대신 선택한 이유는 간단하다.
1. Github으로 코드 관리를 하고 있음
- github의 이벤트에 따라 빌드 / 테스트 / 배포 되었으면 했음
2. 비교하는 글들을 찾아봤을 때 CI/CD 구축하는 난이도가 Github Actions가 좀 더 수월하다고 함

좀 걱정되는건, 큰 규모일 때는 jenkins가 좋다고 하는 점과 속도 측면에서 jenkins가 빠르다는 점인데.. 일단은 빠르게 개발 환경을 구축했으면 좋겠다는 푸시가 있어서 구축하기 수월할 것 같은 github actions을 사용해보려고 한다.. 그래도 Github Actions 찾다보니 카카오워크 서버 개발 파트에서도 사용하고 있다고 하니.. 우리 회사 서비스 규모면 괜찮지 않을까 하는 생각이..ㅎㅎ

시리즈 주요 키워드

글을 쓰고 있는 이 시점에 일단 workflows 등록, docker container로 ec2에서 실행까지 완료한 상태이긴 하다. 이렇게까지 하는데 하루 정도 걸린 것 같다..
이 글 저 글 찾아보면서 진행했을 때, 이걸 만들기 위해 찾게 되는 주요 키워드는

  1. github actions

    • self-host runner
  2. ghcr, ecr

  3. docker
    정도 인 것 같다.

물론 운영 단계까지 CI / CD 가 적용이 되려면 단순히 빌드, 테스트, 배포 뿐만 아니라 뭔가.. 롤백, 백업 도 쉽게 할 수 있어야 할 것 같고 프로세스 모니터링도 가능해야 할 것 같아서 아직 완전 부족하긴 한데.. 개발 진행하면서 보완해나가면 되지 않을까 싶다.

그동안 회사에서 docker를 아예 사용을 안해서 인프런 강의를 사두고도 본 적이 거의 없었는데 이번 기회에 잘 활용하고 있다ㅋㅋㅋ 아무래도 docker 기본 명령어들은 자주 사용을 안하다보면 기억이 안나서 매번 다시 봐야하는데 이번에 좀 익숙해졌으면 좋겠다!

profile
알게 된 내용 부담 없이 남기기
post-custom-banner

0개의 댓글