본문 바로가기
프로그래밍/SpringBoot

Github Actions + AWS CI/CD (3)

by 코딩중독 2024. 3. 8.

AWS 준비

2024.03.08 - [프로그래밍/SpringBoot] - Github Actions + AWS CI/CD (1)

 

Github Actions + AWS CI/CD (1)

Github Actions를 사용해서 지속적 통합(CI)과 배포(CD)에 대한 내용 정리 특이점이 없다면 글보다는 이미지로... AWS IAM 사용자 생성 AWS 리소스에 대한 엑세스를 위한 보안 자격 증명을 관리하는 데 사

story-to-me.tistory.com

 

스프링부트 프로젝트 생성 후 CI 테스트

2024.03.08 - [프로그래밍/SpringBoot] - Github Actions + AWS CI/CD (2)

 

Github Actions + AWS CI/CD (2)

이전 글에서 AWS 준비를 완료하고 인텔리제이와 Github에서 진행하는 내용 정리 2024.03.08 - [프로그래밍/SpringBoot] - Github Actions + AWS CI/CD (1) Github Actions + AWS CI/CD (1) Github Actions를 사용해서 지속적 통합

story-to-me.tistory.com

 

배포를 시작한다

 

Github Secrets and variables

이전 AWS에서 발급받은 엑세스 키를 등록한다

다운로드한 csv 파일 중에 _credentials.csv 파일이 아닌 _accessKeys.csv 파일이다.

AWS_ACCESS_KEY_ID 에는 csv 파일의 Access key ID

AWS_SECRET_ACCESS_KEY 에는 csv 파일의 Secret access key 를 넣어준다.

엑세스 키 등록

 

엑세스 키 등록

 

CICD.yml 내용 추가

지속적인 배포를 위한 스크립트를 추가한다.

 

CICD.yml

name: Java+SpringBoot CI/CD with Gradle  # 이 워크플로우의 이름

on:
  push:  # 코드가 push될 때
    branches: ["master"]  # master 브랜치에 대해서만 작동
  pull_request:  # Pull Request가 열렸을 때
    branches: ["master"]  # master 브랜치에 대해서만 작동

env:  # 환경 변수 설정
  AWS_REGION: ap-northeast-2  # AWS 리전
  AWS_S3_BUCKET: portfolio-notice  # AWS S3 버킷 이름
  AWS_CODE_DEPLOY_APPLICATION: portfolio-notice  # AWS CodeDeploy 어플리케이션 이름
  AWS_CODE_DEPLOY_GROUP: portfolio-notice-group  # AWS CodeDeploy 배포 그룹 이름

permissions:  # 권한 설정
  contents: read  # 컨텐츠에 대한 읽기 권한 설정

jobs:  # 작업 정의
  build:  # 빌드 작업

    runs-on: ubuntu-latest  # GitHub Actions가 실행될 환경 지정

    steps:  # 작업 단계
      - uses: actions/checkout@v3  # 소스 코드를 체크아웃하는 단계

      - name: Set up JDK 17  # JDK 17 설정
        uses: actions/setup-java@v3  # Java 환경 설정 액션 사용
        with:
          java-version: '17'  # 사용할 Java 버전
          distribution: 'corretto'  # Corretto 배포판 사용

      - name: Add permission  # 권한 추가 단계
        run: chmod +x gradlew  # gradlew 파일에 실행 권한 추가

      - name: Build with Gradle  # Gradle로 빌드하는 단계
        run: ./gradlew clean --stacktrace --info build  # Gradle을 사용하여 애플리케이션을 빌드하는 스크립트 실행
        shell: bash  # 실행할 셸 지정

      - name: Make Directory  # [추가] 디렉토리 생성 단계
        run: mkdir -p deploy  # deploy 디렉토리 생성

      - name: Copy Jar  # [추가] Jar 파일 복사 단계
        run: cp ./build/libs/*.jar ./deploy  # 빌드된 Jar 파일을 deploy 디렉토리로 복사

      - name: Copy appspec.yml  # [추가] appspec.yml 파일 복사 단계
        run: cp appspec.yml ./deploy  # appspec.yml 파일을 deploy 디렉토리로 복사

      - name: Copy script  # [추가] 스크립트 파일 복사 단계
        run: cp ./scripts/*.sh ./deploy  # 스크립트 파일을 deploy 디렉토리로 복사

      - name: Make zip file  # [추가] Zip 파일 생성 단계
        run: zip -r ./portfolio-notice.zip ./deploy  # deploy 디렉토리를 포함하여 Zip 파일 생성
        shell: bash  # 실행할 셸 지정

      - name: Configure AWS credentials  # AWS 자격 증명 구성 단계
        uses: aws-actions/configure-aws-credentials@v1  # AWS 자격 증명 액션 사용
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}  # AWS 액세스 키 ID
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}  # AWS 비밀 액세스 키
          aws-region: ${{ env.AWS_REGION }}  # AWS 리전

      - name: AWS S3 Upload  # [추가] AWS S3 업로드 단계
        run: aws deploy push --application-name ${{ env.AWS_CODE_DEPLOY_APPLICATION }} --ignore-hidden-files --s3-location s3://$AWS_S3_BUCKET/portfolio-notice.zip --source .  # AWS S3로 배포 파일 업로드

      - name: AWS EC2 Deploy  # [추가] AWS EC2 배포 단계
        run: aws deploy create-deployment --application-name ${{ env.AWS_CODE_DEPLOY_APPLICATION }} --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name ${{ env.AWS_CODE_DEPLOY_GROUP }} --s3-location bucket=$AWS_S3_BUCKET,key=portfolio-notice.zip,bundleType=zip  # AWS CodeDeploy를 사용하여 EC2에 배포

 

 

테스트 컨트롤러 추가

배포가 성공하면 테스트할 url 추가

@RequestMapping("/api")
@RestController
public class MemberRestController {

    @GetMapping("/welcome")
    public String welcome() {
        return "Welcome~!";
    }

}

 

여기까지 준비가 되면 저장소에 push

 

 

배포 상태 확인

AWS S3 업로드 확인

AWS S3

 

AWS CodeDeploy 배포 확인

AWS CodeDeploy

 

포스트맨에서 접속

EC2 인스턴스의 퍼블릭 IPv4 주소를 사용한다

IP주소:8080/api/welcome

성공

 

여기까지 CI/CD 파이프라인을 구축했다.

 

테스트만 완료한 상태이고 민감정보인 데이터베이스의 url, username, password 등 application.yml 파일 처리에 대한 내용이 남아있다.

'프로그래밍 > SpringBoot' 카테고리의 다른 글

[AWS EC2] MySQL 설치  (0) 2024.06.18
Github Actions + AWS CI/CD (2)  (0) 2024.03.08
Github Actions + AWS CI/CD (1)  (1) 2024.03.08