기존의 우리의 프로젝트에서는 Gradle이 빌드 할 때 Dependency package를 모두 다운로드 받아 사용하는데 이 때 빌드 시간과 네트워크 통신을 줄이기 위해 package를 캐싱해서 재사용하는 방법을 사용한다고 한다.
그렇지만 Github action에서는 workflow를 수행 할 때마다 새롭게 환경을 구축하고 매번 Dependency package를 가지고 오는 작업이 진행되고 이는 곧 전체적인 빌드 시간의 증가로 이어지게 된다.
프로젝트를 진행하면서 처음에는 Github action을 통한 빌드 속도가 크게 신경쓰이지 않았지만 갈수록 빌드/배포 작업이 잦아졌기 때문에 단 10초라도 빌드 속도를 개선시킬 수 있는 방법을 찾던 중, Gradle Caching을 통해 속도 개선이 가능하다는 글을 보고 적용해보기로 했다.
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을 수행해보면 아래와 같이 빌드 속도가 개선된 것을 확인 할 수 있다.

행복하다!!