작성자: 고승원

프로젝트 배포 자동화를 Git Actions을 이용하고 있는데, 5분 가까운 시간이 소요된다는건 오래걸린다 생각이 들어 ci/cd 스크립트를 수정해서 시간을 줄여보도록 한다.

스크립트

CI

기존

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초대로 상당히 단축되었다!!