Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 분할정복
- 백준
- 트리
- 컴퓨터 네트워크
- 브루트포스
- dfs
- 그리드 알고리즘
- AWS
- github action
- 재귀
- 다이나믹프로그래밍
- 알고리즘
- CI/CD
- 자바
- 순열
- TCP
- GIT
- HTTP
- BFS
- 그래프
- Spring
- 역방향 반복자
- SQL
- 자료구조
- 분할 정복
- 그리드
- 이분탐색
- 다이나믹 프로그래밍
- 스프링
- 도커
Archives
- Today
- Total
코딩성장스토리
Github action 빌드 캐싱 본문
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 |