AWS
CI/CD
CI Continuous Integration
CD Continuous Deployment or Continuous Delivery
서비스를 배포한 후에 코드를 수정하게 될 일이 많은데
매번 수동적으로 빌드하고 이전 파일을 무효화한 뒤에 다시 업로드하는 번거로운 과정을 자동화하는 것을 뜻한다.
CI/CD 환경을 구축하는 이유
- 자동화를 통한 효율성 향상
- 코드 품질 보장
CI를 통해 자동으로 코드를 테스트하여 버그와 오류를 발견할 수 있다.
테스트 실패 시, 배포가 되지 않도록 방지한다. - 빠른 피드백
CI/CD 파이프라인은 코드 변경에 대한 각 단계별 빠른 피드백을 제공하여,
문제 발생 시 즉시 수정이 가능하다.
cf. 파이프라인: 코드 병합 - 빌드 - 테스트 - 배포의 흐름을 뜻한다. - 지속적 배포를 통한 사용자 만족도 향상
CD를 통해 새 기능 및 버그 수정 사항을 빠르고 안정적으로 사용자에게 제공 가능
CI/CD의 작동과정
- CI
- 개발자의 코드 푸시가 CI 파이프라인을 실행
- 푸시된 코드 빌드
- 코드 품질 검증
- 성공 시 CD로 이어지고,
- 실패 시 CI 중단되며 실패 결과를 개발자에 전달
- CD
- 배포 준비
- Continuous Delivery vs. Continuous Deployment
- Continuous Delivery: 사람이 배포를 승인
- Continuous Deployment: 자동으로 배포
- Continuous Delivery vs. Continuous Deployment
- 지정된 환경에 파일 업로드, 즉 배포
- 배포 준비
Github Actions
CI/CD 환경을 구축할 수 있는 도구로,
빌드, 테스트, 배포의 작업을 실행하는 역할을 한다.
Github Actions를 사용한 CI/CD의 아키텍처와 흐름
- 개발자가 GitHub 저장소에 커밋 및 푸시
- GitHub Actions에 정의된 워크플로가 실행되며 CI/CD 파이프라인에서 코드 빌드 및 테스트 실행
- GitHub Actions에서 AWS S3로 배포
Github Actions로 CI/CD 구축하기
AWS의 IAM 서비스를 통해
AWS_ACCESS_KEY_ID와AWS_SECRET_ACCESS_KEY발급 받기
(해당 인증키들을 통해 github actions에서 aws에 접근하여 배포를 할 수 있다.)Github 레포지토리에 인증키 등록하기
- Github 레포지토리의 Settings 클릭
- 좌측 메뉴의 Security의 Secrets and variables - actions 클릭
- Repository secrets에
AWS_ACCESS_KEY_ID와AWS_SECRET_ACCESS_KEY등록하기
프로젝트 루트 폴더 내에
.github/workflows/deploy.yml생성 (파일명은 수정 가능)yml 파일에 명령어 입력하기
name: Deploy To S3 And Invalidate Cloudfront on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout@v4 - name: 의존성 설치 run: npm i - name: 빌드하기 run: npm run build - name: AWS Resource에 접근할 수 있게 AWS 인증 설정 uses: aws-actions/configure-aws-credentials@v4 with: aws-region: ap-northeast-2 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: S3 기존 파일 전체 삭제 run: aws s3 rm --recursive s3://facebook-web-page-seyoon - name: 빌드된 파일을 S3에 업로드하기 run: aws s3 cp ./dist s3://facebook-web-page-seyoon/ --recursive - name: Cloudfront 캐시 무효화하기 run: aws cloudfront create-invalidation --distribution-id E3ODPCP192LLXD --paths "/*"name: workflow 이름on:\n\tpush:\n\t\tbranches:\n\t- main:: main 브랜치에 push 동작이 발생할 때 workflow를 실행하겠다.jobs:\n\tdeploy:\n\t\truns-on: unbuntu-latest: 우분투의 안정화된 최신 버전 환경에서 배포라는 작업을 실행하겠다.\t\tsteps:: workflow를 단계 별로 정의한다.- name: 각 단계의 제목uses: github marketplace에 있는 사용할 라이브러리with:uses에서 쓰인 라이브러리를 사용하기 위해 필요한 파라미터 제공run: 각 단계에서 실행할 리눅스 환경의 명령어|를 붙이고 시작하면 여러 줄의 명령어를 입력할 수 있다.
- 실행 단계
- 푸시된 파일들 가져오기
- 의존성 파일 설치
- 빌드
- AWS 인증 키 입력
- S3 버킷에 있는 파일 전체 삭제
- 푸시된 파일들을 S3에 업로드
- S3에 연결된 CloudFront의 캐시를 무효화함으로써 최신 파일 적용시키기
'Notes > AWS & Cloud' 카테고리의 다른 글
| AWS JAM 후기 (1) | 2024.12.02 |
|---|---|
| AWS Chapter. 5 (0) | 2024.11.29 |
| AWS Chapter. 3 (1) | 2024.11.29 |
| AWS Chapter. 2 (1) | 2024.11.29 |
| AWS Chapter. 1 (0) | 2024.11.27 |