여태껏 잘되던 배포가 갑자기 build 단계에서 에러가 발생했다.
COMMAND_EXECUTION_ERROR: Error while executing command: npm run build. Reason: exit status 1
구글링 하면서 다른 사람이 작성한 buildspec 과 내 코드를 비교 해보니 buildspec 에 런타임 버전이 작성되어 있었다.
그래서 공식문서에 나와있는대로 buildspec.yml 에 node version 을 추가했더니 build 에러가 해결됐다..
노드 버전이 안맞아서 생기는 문제 같은데, 정확한 이유는 찾아봐야겠다.
https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/sample-runtime-versions.html
build 문제가 해결되니 또 다른 문제가 발생했다.
아래와 같이 codebuild 가 모두 성공했는데, 자세히 보면 INSTALL 단계부터 걸린 시간이 1sec 밖에 안된다.
즉, 빌드가 안되고 있다는 뜻이었다.
역시나 사이트에 방문하니 변경 된 사항이 적용이 안되어 있었다.
git push 하면 codepipeline 은 성공함
근데 사이트에 들어가보면 변경 사항이 반영이 안되어 있음
그래서 수동으로 cloudfront 에서 무효화를 진행해봤는데도 변경 사항이 반영 안되는 것을 확인
빌드가 문제인거 같아서 디렉토리에 있는 build 파일을 지우고 git push 를 다시 해봄
그러나 디렉토리에 build 파일이 생성이 안됨
명령어가 안듣나 해서 터미널에서 수동으로 npm run build 를 해서 빌드 파일을 생성함
그리고 git push 해봄
codepipeline 은 성공함
그러나 cloudfront 무효화가 동작하지 않음
수동으로 무효화 진행해봄 > 변경 사항 반영 안됨
명령어가 안통하는게 아니라 빌드 자체에 문제가 있는 것 같다
터미널에서 npm run build > npm run upload > npm run cache-purge 수동으로 진행
s3 에 build 파일이 업로드 되고 무효화가 진행되는 걸 확인!! > 사이트에도 반영됨
터미널에서는 명령어가 동작하는데, CI/CD 명령어로는 진행이 안됨
정확한 문제 파악을 위해 cloudwatch 를 연동함 (기존에는 로그를 사용하지 않고 있었다)
빌드 로그를 살펴보니 '.../components/notice' 경로를 찾을 수 없다는 내용의 오류가 발생??
Module not found: Error: Can't reslove '../components/notice' in '/codebuild/output/src1331564951/src/src/pages'
폴더 및 파일이 잘 있는데 이게 뭐지? 싶었다.
찾아보니 내가 작업하다가 중간에 파일명 첫글자를 대문자로 바꿨다가 다시 소문자로 바꿨는데
git 으로 커밋하는 과정에서 대소문자를 구분하지 못해 문제가 발생 한다는 걸 알았다.
즉, 로그에서 경로를 찾을 수 없다고 한 이유가 내가 중간에 폴더명을 대문자>소문자로 바꾸면서 깃이 인식을 못해서 발생했던 것이다😩
해결방법으로는 config 설정을 변경하면 된다.
아래와 같이 명령어를 차례대로 입력 후, 다시 git add 와 git commit 을 해주면 정상적으로 동작한다.
git config core.ignorecase false
git rm -r --cached . < 마침표도 찍어야 한다
이게 문제인지 모르고 codebuild 와 계속 씨름했는데🤯
정말 생각치도 못한 곳에서 발생한 문제여서 해결하고 나서도 이게 뭔가 싶었다.
cloudwatch 을 진작에 사용할걸 그랬다. 로그를 보고 어디서 문제가 발생했는지 파악 후에 접근하니 이상한 곳에서 헤메지 않아도 돼서 시간을 아낄 수 있다.
git 은 대소문자를 구분하지 않기 때문에 폴더명, 파일명을 바꾸면 제대로 인식하지 못할 수도 있다는 걸 알게 됐다.