티스토리 뷰
ECS 인스턴스 Docker에 컨테이너 안 올라갈 경우 (Feat. ECR, Jenkins, Gradle) - war 파일
Devsong26 2021. 9. 7. 15:12ECS와 ECR를 사용 중이며 Jenkins로 배포를 한다.
프로젝트 빌드 툴: Gradle
Specification
Docker: 19.03.13-ce
Gradle: 4.4
ECS 에이전트: 1.48.1
Jenkins는 파이프라인을 사용하며 아래 절차를 따른다.
- Gradle로 프로젝트 빌드 -> war
- Docker Image 생성 -> ECR latest push
- ECS에 latest image를 사용하여 도커 컨테이너 생성
절차 중에 Docker Image Build 후 푸시가 안되는 상황이 발생했다.
어떻게 해결해야 할까?
문제는 Gradle 버전으로 인해 build 시 생성되는 war 파일명 때문이었다.
build.gradle의 war.archiveName로 설정할 수 있다.
war{
archiveName = "demo.war"
}
docker build -t 를 이용하여 이미지를 생성할 때, 도커파일을 사용한다.
이때, war 파일을 사용하는 코드에서 문제가 발생했다.
# Dockerfile
ADD build/libs/demo.war $CATALINA_HOME/webapps/ROOT.war
# Jenkins Error
ADD failed: stat /var/lib/docker/tmp/docker-builder734073829/build/libs/demo.war: no such file or directory
검색을 해봐도 애매한 답 밖에 안 나온다.
직접 디버깅을 해야 하는 상황이다.
젠킨스 로그를 보면 젠킨스 서버의 워크스페이스 경로를 확인할 수 있고, war 파일도 확인 가능하다.
# Jenkins Log
/var/lib/jenkins/workspace/demo/~
"/workspace/"로 검색하여 찾을 수 있다.
필자와 jenkins 경로가 다를 수 있다.
확인한 war 파일명이다.
demo-1.0.1-SNAPSHOT.war
gradle 4.1로 빌드 시 archiveName으로 war 파일이 생성되지만 4.4는 "archiveName-version.war"로 파일을 생성한다.
version은 build.gradle에 설정한 값이다.
그러므로 도커파일에서 war명을 "archiveName-version.war"로 바꿔주면 해결된다.
# Dockerfile
ADD build/libs/demo-1.0.1-SNAPSHOT.war $CATALINA_HOME/webapps/ROOT.war
'[개발] Infrastructure > AWS' 카테고리의 다른 글
OAI를 사용하여 Cloudfront를 배포한 경우, aws cli s3는 어떻게 사용할까? (0) | 2021.09.25 |
---|---|
s3 bucket에서 사이즈가 가장 큰 file 찾기 (0) | 2021.08.12 |
About accessing AWS instances ssh using .pem (0) | 2021.08.06 |
사용 중인 모든 AWS 서비스를 확인하는 방법인 Tag Editor를 알아보자. (0) | 2021.07.30 |
미 사용 AWS EC2 보안 그룹은 어떻게 확인할까? (0) | 2021.07.28 |