7. Github Actions 설정 - hoho4190/aws-ec2-cicd-with-github-actions GitHub Wiki

7.1. PR CI workflow

main 브런치로 PR 발생 시 gradle build 실행

.github/workflows/gradle-pr-ci.yml

name: Gradle PR CI

on:
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:    
    - uses: actions/checkout@v3
    
    - name: Set up JDK 8
      uses: actions/setup-java@v3
      with:
        java-version: '8'
        distribution: 'temurin'
        
    - name: Build with Gradle
      uses: gradle/[email protected]
      with:
        arguments: build

7.2. Push CI/CD workflow

main 브런치로 Push 발생 시 gradle build, 배포 실행

.github/workflows/gradle-push-cicd.yml

name: Gradle CI/CD

on:
  push:
    branches: [ "main" ]

permissions:
  contents: read

# 각자 설정한 값으로 변경
env:
  AWS_REGION: ap-northeast-2
  S3_BUCKET_NAME: cicd-github-s3-bucket                                # 2.1. 단계
  CODE_DEPLOY_APPLICATION_NAME: cicd-codedeploy-app                    # 3.2. 단계
  CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: cicd-codedeploy-deployment-group  # 3.3. 단계

jobs:
  build:

    runs-on: ubuntu-latest

    steps:    
    - uses: actions/checkout@v3
    
    - name: Set up JDK 8
      uses: actions/setup-java@v3
      with:
        java-version: '8'
        distribution: 'temurin'
        
    - name: Build with Gradle
      uses: gradle/[email protected]
      with:
        arguments: build
#         arguments: clean build -x test # Gradle test 제외하고 싶은 경우
        
    # IAM 사용자 엑세스 키로 AWS 인증
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
        aws-region: ${{ env.AWS_REGION }}

    # 파일을 S3에 업로드
    - name: Upload to AWS S3
      run: |
        aws deploy push \
          --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
          --ignore-hidden-files \
          --s3-location s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip \
          --source .

    # CodeDeploy로 EC2 인스턴스에 S3의 파일을 배포
    - name: Deploy to AWS EC2 from S3
      run: |
        aws deploy create-deployment \
          --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
          --deployment-config-name CodeDeployDefault.AllAtOnce \
          --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
          --s3-location bucket=$S3_BUCKET_NAME,key=$GITHUB_SHA.zip,bundleType=zip