반응형
저번 포스트에서는 PRE_BUILD단계의 오류를 해결했다. 이번 포스트에서는 그 다음 BUILD 단계에서 발생한 오류를 해결해 보자
1. BUILD단계의 오류 파악하기
1-1. 오류 파악
- PRE_BUILD오류를 해결했더니 이번에는 BUILD 에서 오류가 발생했다. 오류 로그를 바로 확인했다.
1-2. 오류 로그 확인
#5 [2/2] ADD build/libs/member-0.0.1-SNAPSHOT.jar member-api.jar
#5 ERROR: failed to calculate checksum of ref moby::z5ufilzi940gpc8hp3lj0ypj8: failed to walk /var/lib/docker/tmp/buildkit-mount237631583/build/libs: lstat /var/lib/docker/tmp/buildkit-mount237631583/build/libs: no such file or directory
#6 [1/2] FROM docker.io/library/amazoncorretto:17-al2-jdk@sha256:e9d48fda62bb4266a7fe4fd524e96463615a6cb3176210676814efe20ececaaa
#6 resolve docker.io/library/amazoncorretto:17-al2-jdk@sha256:e9d48fda62bb4266a7fe4fd524e96463615a6cb3176210676814efe20ececaaa 0.0s done
#6 sha256:e9d48fda62bb4266a7fe4fd524e96463615a6cb3176210676814efe20ececaaa 547B / 547B done
#6 sha256:dfbfa19bccc9104bc5d39d2c4d5b3f2ec1e721e3af5f6af945bf4d2d2ef0a038 742B / 742B done
#6 sha256:ee544fb8d73106a928b4d785c2bf5a959fcf49c98acc0008349839348a461d4a 3.07kB / 3.07kB done
#6 CANCELED
------
> [2/2] ADD build/libs/member-0.0.1-SNAPSHOT.jar member-api.jar:
------
Dockerfile:9
--------------------
7 | # Specify the built JAR file path and add it to the container as member-api.jar
8 | ARG JAR_FILE=build/libs/member-0.0.1-SNAPSHOT.jar
9 | >>> ADD ${JAR_FILE} member-api.jar
10 |
11 | # Run the JAR file
--------------------
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref moby::z5ufilzi940gpc8hp3lj0ypj8: failed to walk /var/lib/docker/tmp/buildkit-mount237631583/build/libs: lstat /var/lib/docker/tmp/buildkit-mount237631583/build/libs: no such file or directory
[Container] 2023/10/28 11:39:11.768023 Command did not exit successfully docker build -t 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository:latest . exit status 1
[Container] 2023/10/28 11:39:11.771511 Phase complete: BUILD State: FAILED
[Container] 2023/10/28 11:39:11.771526 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker build -t 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository:latest .. Reason: exit status 1
[Container] 2023/10/28 11:39:11.808032 Entering phase POST_BUILD
[Container] 2023/10/28 11:39:11.808812 Running command echo Pushing the Docker image...
Pushing the Docker image...
[Container] 2023/10/28 11:39:11.813458 Running command docker push 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository:latest
The push refers to repository [473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository]
An image does not exist locally with the tag: 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository
[Container] 2023/10/28 11:39:11.829911 Command did not exit successfully docker push 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository:latest exit status 1
[Container] 2023/10/28 11:39:11.832842 Phase complete: POST_BUILD State: FAILED
[Container] 2023/10/28 11:39:11.832856 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker push 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository:latest. Reason: exit status 1
- 위에서 발생한 오류의 핵심 부분은 다음과 같다.
#5 ERROR: failed to calculate checksum of ref moby::z5ufilzi940gpc8hp3lj0ypj8: failed to walk /var/lib/docker/tmp/buildkit-mount237631583/build/libs: lstat /var/lib/docker/tmp/buildkit-mount237631583/build/libs: no such file or directory
- 로그에 의하면 Docker 빌드 프로세스가 "build/libs" 라는 디렉터리를 찾을 수 없다는 것을 나타낸다. build/libs/member-0.0.1-SNAPSHOT.jar 파일의 경로가 올바르지 않거나, 빌드 컨텍스트 내에 존재하지 않아서 생긴 오류같으니 이 파일이 현재 디렉터리의 build/libs 폴더에 있는지 확인을 해볼 필요가 있다.
1-3. 오류를 생각해보기
- 나는 "member-0.0.1-SNAPSHOT.jar"가 깃허브 저장소에 없기 때문이 아닐까? 라는 생각이 들었다. 그래서 GPT에게 물어봤더니 대답은 이랬다.
build/libs/member-0.0.1-SNAPSHOT.jar 파일은 Gradle 빌드 프로세스를 통해 생성되어야 한다.
이 파일은 깃허브 저장소에 미리 존재하지 않아도 된다. 대신, AWS CodeBuild 프로젝트의 빌드 프로세스 중에 생성되어야 한다.
2. 오류 해결하기 (Buildspec.yaml 수정)
2-1. 빌드 프로젝트 들어가기
- 하단의 이름을 클릭해서 프로젝트 "구성"으로 들어간다.
2-2. Buildspec 들어가기
- 아래와 같은 구성 페이지에서 "편집" 버튼을 클릭하고 "Buildspec"을 클릭한다.
2-3. Buildspec.yaml 수정하기
- 여기서 기존 buildspec.yaml에 ./gradlew build 명령어를 추가해 준다. (아래의 코드는 가져가서 수정을 해야 사용이 가능하다.)
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin {내 ecr 저장소/저장소 이름}
- echo Building the Spring Boot application...
- ./gradlew build # Gradle 빌드 명령을 추가합니다.
build:
commands:
- echo Building the Docker image...
- docker build -t {내 ecr 저장소:tag .}
post_build:
commands:
- echo Pushing the Docker image...
- docker push {내 ecr 저장소:tag}
- 아래와 같이 적게될 것이다.
3. 빌드하기
3-1. Codepipeline 실행
- 수정을 마쳤으니 다시 Codepipeline을 실행했다.
3-2. 빌드 성공
- 드디어 빌드에 성공했다! 이제 실제로 이미지가 ECR에 제대로 들어갔는지 확인했다.(잘 들어갔다)
3-3. 새로운 문제 발생
- 근데 "Deploy" 배포단계에서 오류가 생겼다. 오류내용을 슬쩍 보니 이번에도 S3관련 오류인것 같다.
- 아래의 오류가 발생했다. 다음 포스트에서 "배포" 오류까지 해결해 보자
Unable to access the artifact with Amazon S3 object key 'recipia-member-git-n/BuildArtif/IejGhqN' located in the Amazon S3 artifact bucket 'codepipeline-ap-northeast-2-555139989952'. The artifact object key is not found.
이번 포스트에서는 드디어 길고 길었던 "빌드" 단계의 오류를 해결했다.
다만 산넘어 산이라고 "Deploy"인 배포단계에서 오류가 발생했다.
다음 시간에는 배포오류를 해결해보도록 하겠다.
2023.10.30 - [AWS] - AWS CI/CD: CodePipeline 배포 오류 수정 (7편)
2023.10.30 - [AWS] - AWS CI/CD: CodePipeline 두 번째 빌드 오류 해결 (5편)
반응형
'AWS > CodePipeline, CICD' 카테고리의 다른 글
AWS CI/CD: CodePipeline 배포 최종 점검 (8편) (0) | 2023.10.30 |
---|---|
AWS CI/CD: CodePipeline 배포 오류 수정 (7편) (1) | 2023.10.30 |
AWS CI/CD: CodePipeline 두 번째 빌드 오류 해결 (5편) (1) | 2023.10.30 |
AWS CI/CD: CodePipeline 첫 번째 빌드 오류 해결 (4편) (2) | 2023.10.29 |
AWS CI/CD: CodePipeline 배포 및 검토 (3편) (0) | 2023.10.29 |