작성자: 고승원
프로젝트 배포 자동화를 Git Actions을 이용하고 있는데, 5분 가까운 시간이 소요된다는건 오래걸린다 생각이 들어 ci/cd 스크립트를 수정해서 시간을 줄여보도록 한다.
name: CI
on:
pull_request:
branches:
- develop
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
#CI
- name: Generate environment file
run: |
mkdir -p env
echo "${{secrets.DOCKER_COMPOSE_ENV}}" >> env/docker-compose.env
echo "${{secrets.LOCAL_SPRING_ENV}}" >> env/spring.env
echo "${{secrets.AWS_ENV}}" >> env/aws.env
echo "${{secrets.JWT_ENV}}" >> env/jwt.env
echo "${{secrets.OAUTH2_ENV}}" >> env/oauth2.env
echo "${{secrets.TEST_DB_ENV}}" >> env/test-db.env
- name: Run docker-compose
uses: isbang/[email protected]
with:
compose-file: "./docker/docker-compose.yml"
- name: Get execution permission to gradlew
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build
기존의 ci 방식을 살펴보면 secrets를 env파일로 변환 후 도커컴포즈 환경에서 빌드하는 방식이다.
시간을 줄일 방법은 그래들 캐싱과 빌드과정 간소화이다.
그래들 캐싱
- name: Caching gradle
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
그래들 또는 프로퍼티가 변경되는경우 path 하위 폴더를 캐싱한다. 그렇지 않은 경우 캐시된 그래들을 사용한다.
그래들 캐싱 외에도 그래들 test or bootJar 를 통해 시간을 단축할 수 있다. 하지만 ci시에 빌드를 한다면 테스트 단계에서 코드를 실행하기 전에 컴파일 및 패키징 오류 등을 미리 잡아낼 수 있다. 빌드 단계를 건너뛰고 테스트만 진행하면 이러한 오류를 발견할 수 없고, 테스트 실패로 인해 불필요한 디버깅 시간을 허비할 수 있다.
기존에 4분 20초대의 CI 소요 시간이
1분 30초대로 상당히 단축되었다!!