티스토리 뷰
이전 글에서는 GitHub Actions에서 컨테이너를 만들고 ECR에 업로드까지 진행해봤다.
하지만 ECR에 업로드할 컨테이너 이미지를 만드는 과정에서 Dockerfile을 필요로하고, 빌드도 포함해야 한다.
이 과정이 불필요하게 프로세스를 잡아 먹기 때문에 아래와 같이 JIB을 이용해 이미지를 바로 생성한다.
Jib는 애플리케이션을 컨테이너 이미지로 패키징하는 모든 단계를 처리합니다. Dockerfile을 만들거나 Docker를 설치하기 위한 권장사항을 알 필요가 없습니다.
구글에서 제공하는 JIB 공식 사이트에서 소개한 말인데 딱 적절하게 소개해 준 것 같다.
사용방법은 간단하다.
의존성은 따로 정의할 필요 없이 build.gradle 파일에 필요한 내용들을 작성하고,
github actions 스크립트에서 빌드 할 때 별도의 스텝을 지정해주면 된다.
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
id 'com.google.cloud.tools.jib' version '3.3.1'
}
...
jib {
from {
image = "amazoncorretto:17"
platforms {
platform {
architecture = "amd64"
os = "linux"
}
}
}
to {
image = "[YOUR ECR REGISTRY URL]"
}
container {
jvmFlags = ['-XX:+UseContainerSupport', '-Duser.timezone=UTC']
ports = ['YOUR PORT']
creationTime = "USE_CURRENT_TIMESTAMP"
}
}
...
jvmFlags로 몇 가지 옵션을 지정해줬다.
내가 설정한 옵션은 타임존을 UTC로 지정해줬는데, 주목할 점은 UseContainerSupport 옵션이다.
이 옵션은 자바를 컨테이너 환경에서 사용하겠다는 명시해 JVM이 컨테이너 환경에서 메모리를 최적화 해준다고 한다.
자세한 옵션들은 여기서 확인할 수 있다.
Github actions script
- name: 소스코드 빌드
run: |
chmod +x gradlew
./gradlew build
./gradlew jib -Djib.to.tags=${{ github.sha }}
예시 코드 이기 때문에 임의의 태그 값을 붙였다.
마치며
여기까지가 CI를 간단하게 정리한 글이다.
다음 단계부터는 CD가 진행되는데 여기서 방법이 많이 갈린다.
현재 서비스는 EKS에서 ArgoCD로 배포를 진행하고 있지만, 갑자기 EKS로 점프하면 기본적인 부분을 이해하지 못하고 넘어갈 것 같다.
반년간 k8s 사용법을 익히고 ArgoCD 글을 작성했다...
2024.06.04 - [개발/인프라] - Terraform으로 EKS 배포하기 9. GitOps와 ArgoCD
2024.06.10 - [개발/인프라] - Terraform으로 EKS 배포하기 10. ArgoCD와 GitHub 연동
참고 사이트
https://cloud.google.com/java/getting-started/jib?hl=ko#what-is-jib
'개발 > 인프라' 카테고리의 다른 글
이미 생성된 AWS Resource Terraform import 하기 (0) | 2024.04.16 |
---|---|
Serverless Framework로 AWS Lambda 관리하기 - Python편 (1) | 2024.02.19 |
github action으로 CI/CD 구축하기 - 1. CI (0) | 2023.11.06 |
AWS EC2에서 Jenkins 자동배포 구축하기(2) (2) | 2023.05.08 |
AWS EC2에 MySQL Docker 띄우고 사용하기 (0) | 2023.03.29 |
- Total
- Today
- Yesterday
- elasticsearch
- Kotlin
- lambda
- java
- GIT
- S3
- 스프링부트
- OpenAI
- ChatGPT
- AOP
- openAI API
- Log
- 티스토리챌린지
- JWT
- AWS
- 람다
- AWS EC2
- CloudFront
- terraform
- Spring
- docker
- 후쿠오카
- cache
- springboot
- MySQL
- Elastic cloud
- EKS
- serverless
- 오블완
- OpenFeign
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |