본문 바로가기
TIL

[240110] CI/CD 공부 (1) CI

by 진진리 2024. 1. 10.
728x90

CI/CD란?

  • Continuous Integration/Continuous Deployment(Delivery)의 약자로, 지속적인 통합과 지속적인 제공을 의미
  • 기본 개념
    • 지속적인 통합(Continuous Integration): 자동화된 빌드와 자동화된 테스트를 제공
    • 지속적인 서비스 제공 (Continuous Delivery)
    • 지속적인 배포(Continuous Deployment): 배포를 자동화하여 배포 시간을 단축하고 코드 결과물을 빠르게 지속적으로 제공

왜 Docker?

  • 애플리케이션 개발과 배포가 편해짐
    • Docker Container 내부에서 여러 소프트웨어를 설치해도 호스트 OS에 영향이 없음
    • CI 과정의 테스트에서 Docker를 활용
    • 어떤 서버에 올려도 같은 환경으로 구성된 컨테이너로 동작하기 때문에 표준화된 배포를 구성할 수 있음
  • Docker가 가상화에서 사실상 표준의 위치임
  • 여러 애플리케이션의 독립성과 확장성이 높아짐

1. AWS DB 배포하기

  • AWS RDB에서 데이터베이스를 생성
    • 표준생성, 프리티어, 퍼블릭 액세스: 예, 추가 구성: 초기 데이터베이스 이름 설정 후 생성

2. CI (빌드, 테스트 자동화)

Github Actions - set up a workflow yourself -> 를 클릭하여 새 yml파일을 생성

  • application-prod.yml 파일의 내용을 github의 secrets의 repository에 저장한다.
  • 해당 파일을 가져와서 ./src/main/resources 위치에 application-prod.yml 파일로 저장한다.
  • 이후 application-prod.yml 환경에서 프로그램을 빌드시킨다.
name: Build check

on:
  pull_request:
    branches:
      - develop

jobs:
  build:
    name: Build check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'corretto'

      - name: make application-prod.yml // application-prod.yml 파일 생성
        run: |
          cd ./src/main/resources
          touch ./application-prod.yml
          echo "${{ secrets.YML_PROD }}" > ./application-prod.yml
        shell: bash

      - name: Grant execute permission for gradlew  // gradle 빌드 실행 권한을 부여
        run: chmod +x gradlew

      - name: Build with Gradle
        env:
          SPRING_PROFILES_ACTIVE: prod  // application-prod.yml 환경에서 빌드
        run: ./gradlew clean build --stacktrace
        shell: bash

 

3. AWS S3 생성

모든 퍼블릭 액세스 차단

 

4. AWS IAM 사용자 생성

권한 설정

  • AWSCodeDeployFullAccess
  • AmazonS3FullAccess

IAM 사용자 > 보안 자격 증명 > 액세스 키 만들기

AWS 외부에서 실행되는 애플리케이션 선택

액세스 키, 비밀 액세스 키 저장

 

5. 액세스 키, 비밀 액세스 키 설정

Github Settings > Secrets and Variables > actions > Repository Secrets에 추가

  • AWS_ACCESS_KEY_ID - 액세스 키 ID
  • AWS_PRIVATE_ACCESS_KEY - 비밀 액세스 키

 

6. EC2 설정

 

AWS EC2 인스턴스 생성 및 설정

EC2란? Amazon Elastic Compute Cloud(Amazon EC2)는 Amazon Web Services(AWS) 클라우드에서 확장 가능 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하면 하드웨어에 선투자할 필요가 없어 더 빠르게 애플리케이션을

rachel0115.tistory.com

 

이후 수동 배포를 해보고, 강의 수강을 하면서 살을 더 붙일 예정이다.

 

참고

https://rachel0115.tistory.com/entry/Github-Actions%EB%A1%9C-CICD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-EC2-S3-CodeDeploy

 

Github Actions로 CI/CD 구축하기 #1 (EC2, S3 생성 및 설정)

📌 Spring Boot Project Github Actions 를 활용한 CI/CD를 구축해보기 위해 이전에 진행했던 개인 프로젝트를 이용하였습니다. 모든 코드는 아래 URL에서 확인 가능합니다. https://github.com/KAispread/ModuForms GitH

rachel0115.tistory.com