코딩성장스토리

Github action 빌드 캐싱 본문

GitHub,Git

Github action 빌드 캐싱

까르르꿍꿍 2023. 9. 17. 18:08

CI/CD 쪽을 공부하다가 배포과정에서 많은 시간이 걸리고 이를 줄이는 방법에 대해 알아보았다.

시간을 줄이기 위해서는 캐싱작업이 필수적이다.

캐싱작업이란?

배포하면서 거의 변동되지 않는 파일을 중복적으로 설치 및 배포하는 과정이 있다.

이런 파일들을 미리 Github의 캐시에 올려두고 사용한다.

(대표적으로는 Spring 의 gradle을 예시로 둘 수 있다.)

 

사실 별도의 설정 없이 Github action이나 Docker에서  이미 캐싱 기능을 지원해주고 있다.

 

이번에는 이 두가지에 대해 알아보겠다.

1. 도커 배포 빌드 캐싱

참조 자료: https://docs.docker.com/build/cache/backends/gha/#scope 

 

GitHub Actions cache

Use the GitHub Actions cache to manage your build cache in CI

docs.docker.com

배포.yml

uses: docker/build-push-action@v3
        with:
          context: .
          platforms: linux/amd64,linux/arm64
          push: true
          tags: myunghyunnero/latest
          cache-from: type=gha             //캐싱 작업
          cache-to: type=gha,mode=max       //캐싱 작업

Dockerfile

# Build stage
FROM openjdk:11 AS builder
WORKDIR /gradle
COPY gradlew build.gradle settings.gradle ./
COPY gradle/ gradle/
# 의존성 패키지만 빌드해서 캐싱 적용
RUN ./gradlew build || return 0

#모든 파일 도커로 옮김 
COPY . . 

# gradlew build 실행해서 모든 파일 빌드 -> 여기서 의존성 패키지는 캐싱되므로 바뀐 부분만 빌드 
RUN ["./gradlew", "clean", "build", "--no-daemon"]


# Run stage
FROM openjdk:11
EXPOSE 8080
WORKDIR /app
COPY --from=builder /gradle/build/libs/*.jar ./app.jar   #gradle밑에 있는 실행파일 롬ㄱ미

# 이미지 실행하면 기본으로 실행되는 명령어
CMD ["java", "-jar", "app.jar"]

 

2.github 캐싱 지원

- name: Cache Gradle packages
        uses: actions/cache@v2
        with:
        # gradle 빌드시 파일 저장되는 경로 
          path: |
            ~/.gradle/caches     
            ~/.gradle/wrapper
        # 캐싱할 때 쓰이는 키 -> 해당 키가 존재하면 캐시 히트 , githib action 내장함수 hashFiles로 키지정
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          # 키를 못찾으면 restore key를 이용해 다른 키 찾음 , 우선순위별로 위에서 아래로 감 
          restore-keys: |
            ${{ runner.os }}-gradle-

 

 

위의 두가지 캐싱작업은 오래걸리는 작업인 Gradle을 기준으로 한 것이다.

다른 프로젝트에서는 중복적이고 오래작업하는 것을 캐싱하면 될 것 이다.

'GitHub,Git' 카테고리의 다른 글

Git rebase 이용  (0) 2022.07.11
Git 추가된 최신 commit 로컬로 가져오기  (0) 2022.07.11
Git add,commit 삭제 및 수정  (0) 2022.07.11
Git 설정 및 브랜치 생성  (0) 2022.07.11
Git commit정보 얻기  (0) 2022.07.11