CI/CD
- ec2에 스프링부트 프로젝트를 배포한 적이 있었는데 매우 번거로웠다. 특히 소스가 변경될 때마다 매번 똑같은 배포 과정을 수동으로 직접 진행해야 한다.
- 위 과정을 git 에 push만 하면 자동으로 배포되게 만들어볼 목적으로 우선 CI/CD를 공부한다.
CI
- Continuous Integration
- 지속적인 통합
- prepare release
CI의 중요한 포인트
- 코드 변경사항을 주기적으로 빈번하게 머지해야 한다.
- 통합을 위한 단계(빌드, 테스트, 머지)의 자동화
- 개발 프로세스의 핵심은 자동화다.
CI 장점
- 개발 생산성 향상
- 문제점을 빠르게 발견
- 머지되는 모든 코드들은 자동으로 빌드되고 테스트되기 때문
- 버그 수정 용이
- 코드의 퀄리티 향상
CD
- Continuous Delivery/Deployment
- 지속적인 제공/지속적인 배포
Continuous Delivery
- release가 준비되자마자 수동적으로 배포하는 것
- 최종 단계가 자동화X
Continuous Deployment
- release가 준비되자마자 배포까지 자동적으로 하는 것
- 최종 단계도 자동화O
CI/CD 툴
- Jenkins
- Buildkite
- Github Actions
- Bitbucket Pipelines
- Gitlab CI/CD
Github Actions
- GitHub Actions is a continuous integration and continuous delivery (CI/CD) platform that allows you to automate your build, test, and deployment pipeline
- 특정 작업을 실행하고 없어지는 가상환경
- 특정 git 이벤트가 발생하면 자동으로 트리거되서 사용자가 요청한 작업을 수행하고 사라진다.
Events, Workflows, Jobs, Actions, Runners
-
Event
- 작업 뭉치를 동작하는 이벤트
- 특정한 이벤트가 발생했을 때 어떤 일을 자동화해서 수행하고 싶은지 명시할 수 있는 것
- push, release, pull request 등의 이벤트
-
Workflows
- 작업 뭉치
- 워크플로우 안에는 Job 혹은 Jobs가 있다.
- 각각의 job은 run unit tests, run E2E tests 등의 작업이 들어가있다.
- Runner가 병렬적으로 실행해준다.
-
Jobs
- 동시 수행 가능한 작업 단위
- Job 내부의 일들을 어떤 순서로 처리할지 명시해줄 수 있다.
-
Actions
- 재사용할 수 있는 job의 step
- 다양한 명령어들이 Action 으로 정의되어 있음
-
Steps
- 순서대로 실행되는 쉘 커멘드 또는 aciton
Github Actions 장점
- No separate CI/CD service (Jenkins, Travis CI, etc.)
- No need to set up webhooks!
Secrets를 통해 env 파일 생성하기
- 왜 필요한가?
- 환경변수 파일은 일반적으로 루트 디렉토리에 저장한다.
- 소스코드를 Github Actions을 통해 Push 이벤트가 발생하면 Surge나 Netlify 등의 호스팅 서비스 혹은 개인 서버에 배포하는 Action이 트리거하기 위한 경우에 필요하다.
참고
https://docs.github.com/en/actions
Heroku
Heroku 아키텍처
- 사용자 애플리케이션을 리눅스 컨테이너로 운영
- 사용자가 리눅서 서버를 관리하지 않는 서버리스
- 특징은 slug 생성 과정을 모두 자동화한다는 것
- 사용자가 git push 하면 자동으로 빌드하고 slug 타입으로 배포
- buildpack이 빌드를 수행하고 slug를 생성
- github과 연동이 되며 소스코드 빌드/애플리케이션 배포까지 수행한다.
회고
- ec2에 스프링부트 프로젝트를 배포한 적이 있었는데 매우 번거로웠다. 특히 소스가 변경될 때마다 매번 똑같은 배포 과정을 수동으로 직접 진행해야 한다. 그 과정을 git 에 push만 하면 자동으로 배포되게 만들어보고 싶었는데 하루 만에 하기는 좀 어려웠다. 다음에 차근차근 다시 시도해봐야겠다.