CI/CD

wisdom·2022년 8월 11일
0

백엔드 개발자라면?

목록 보기
12/42

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

github actions workflows

  • 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만 하면 자동으로 배포되게 만들어보고 싶었는데 하루 만에 하기는 좀 어려웠다. 다음에 차근차근 다시 시도해봐야겠다.
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글