본문 바로가기
프로그래밍/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