Github Action gradle 빌드 속도 개선

이진석·2022년 12월 17일

기존의 우리의 프로젝트에서는 Gradle이 빌드 할 때 Dependency package를 모두 다운로드 받아 사용하는데 이 때 빌드 시간과 네트워크 통신을 줄이기 위해 package를 캐싱해서 재사용하는 방법을 사용한다고 한다.

그렇지만 Github action에서는 workflow를 수행 할 때마다 새롭게 환경을 구축하고 매번 Dependency package를 가지고 오는 작업이 진행되고 이는 곧 전체적인 빌드 시간의 증가로 이어지게 된다.

프로젝트를 진행하면서 처음에는 Github action을 통한 빌드 속도가 크게 신경쓰이지 않았지만 갈수록 빌드/배포 작업이 잦아졌기 때문에 단 10초라도 빌드 속도를 개선시킬 수 있는 방법을 찾던 중, Gradle Caching을 통해 속도 개선이 가능하다는 글을 보고 적용해보기로 했다.

기존 Workflow

name: wef server CI/CD

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

env:
  S3_BUCKET_NAME: test332-bucket

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

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


          ## application.properties 파일 생성
      - name: make application.properties
        run: |
          echo ">> mkdir & touch"
          mkdir -p ./src/main/resources
          cd ./src/main/resources
          touch ./application.properties
          echo ">> copy application.properties"
          echo "${{ secrets.PROPERTIES }}" >> ./application.properties


      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
        shell: bash

      - name: Build with Gradle
        run: ./gradlew build
        shell: bash

      - name: Make zip file
        run: zip -r ./wef.zip .
        shell: bash

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-2

      - name: Upload to S3
        run: aws s3 cp --region ap-northeast-2 ./wef.zip s3://$S3_BUCKET_NAME/


      # Deploy
      - name: Deploy
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run:
          aws deploy create-deployment
          --application-name wef
          --deployment-group-name wef-group
          --file-exists-behavior OVERWRITE
          --s3-location bucket=test332-bucket,bundleType=zip,key=wef.zip
          --region ap-northeast-2

위 설정이 이전까지 설정해놓은 workflow 였는데 빌드 속도를 확인해보면 아래와 같이 1분 40초 이상 걸리는 것을 확인 할 수 있었다.

workflow Setup JDK 다음에 아래 코드를 추가해준다.

 - name: Gradle Caching
        uses: actions/cache@v3
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-

이후 action을 수행해보면 아래와 같이 빌드 속도가 개선된 것을 확인 할 수 있다.

행복하다!!

profile
고양이 두마리의 집사이자 행복 코딩을 추구하는 주니어 개발자입니다!

0개의 댓글