AWS codebuild - Next.js >= v18.17.0 / Node.js 20.x / yarn set version 4.x 오류

긴 글이 될 것 같아 결론부터 이야기 하자면 npm install -g corepack 을 통해 해결했다.

여기서부터는 디버깅 스토리다.


AWS CodeBuild 로 CI/CD 진행 중 오류가 났다.


오류 내용은 아래와 같다.

[Container] 2024/01/22 01:18:44.754730 Entering phase BUILD
[Container] 2024/01/22 01:18:44.755155 Running command yarn build
You are using Node.js 18.16.1. For Next.js, Node.js version >= v18.17.0 is required.

[Container] 2024/01/22 01:18:45.671796 Command did not exit successfully yarn build exit status 1
[Container] 2024/01/22 01:18:45.675216 Phase complete: BUILD State: FAILED
[Container] 2024/01/22 01:18:45.675229 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: yarn build. Reason: exit status 1

현재 Next.js에 노드 버전(CodeBuild 스펙)은 18.16.1 이니 18.17.0 이상으로 올리라는 것이다.

갑자기 이렇게 오류가 나온 이유는 뭘까? 무엇인가 변경된 것인가? 라는 생각에 직원들과 이야기하니 개발용은 Node 버전을 올려서 Next.js 를 구축하고 있다고 한다.

Next.js 어플리케이션에서는 Node의 버전을 올렸고 빌드하는 AWS CodeBuild의 스펙은 Node의 버전이 18.x라고 되어 있기 때문에 오류가 났다.

이 부분을 18.x 가 아니라 그 이상 버전인 20.x 버전으로 런타임 버전이 있는지 확인해 본다. [링크]

20.x 로 존재한다.


이제 AWS CodeBuild 의 Build Spec의 nodejs 버전을 20.x로 변경한다.

저장하고 다시 빌드를 진행해 보니 아래와 같은 오류가 났다.

[Container] 2024/01/22 02:20:53.980647 Phase context status code: YAML_FILE_ERROR Message: Major version of alias '20.x' is not supported in runtime 'nodejs'.

20.x 를 지원하지 않는다는 것이다.

아무래도 빌드를 돌리기 위한 서버의 OS 이미지 버전에서 지원을 하지 않는 것 같아 찾아봤다.

각 이미지별 지원 버전이 달랐다.

내가 설정한 환경 버전을 확인해 봤다.

이상하다. User Guide 에는 amazon linux2 x86_64 에 standard:5.0이 없다??
그런데 이전에 빌드 성공했던 Node.js 18.x 에도 없다.

아무래도 누락된 것 같다.
여튼 이것 저것 시도하다가 알아낸 방법은 standard:5.0 도 23.07.28 버전과 24.01.13 버전이 달랐다.

이렇게 이미지 버전을 설정하고 다시 빌드를 진행해 보았다.

이번에는 노드 20.x 까지는 잘 설치되었지만 yarn에서 문제가 생겼다.

[Container] 2024/01/22 02:25:44.329854 Resolved 'nodejs' runtime alias '20.x' to '20'.
[Container] 2024/01/22 02:25:44.329887 Selecting 'nodejs' runtime version '20' based on manual selections...
[Container] 2024/01/22 02:25:47.862641 Running command echo "Installing Node.js version 20 ..."
Installing Node.js version 20 ...

[Container] 2024/01/22 02:25:47.870293 Running command n $NODE_20_VERSION
     copying : node/20.9.0
   installed : v20.9.0 (with npm 10.1.0)

[Container] 2024/01/22 02:27:05.815146 Moving to directory /codebuild/output/src2537464555/src
[Container] 2024/01/22 02:27:05.816598 Expanded cache path .yarn/cache/**/*
[Container] 2024/01/22 02:27:05.818085 Expanded cache path node_modules/**/*
[Container] 2024/01/22 02:27:05.850326 Configuring ssm agent with target id: codebuild:890c8a43-2bda-4b93-9a0c-c6c820977e0d
[Container] 2024/01/22 02:27:05.894141 Successfully updated ssm agent configuration
[Container] 2024/01/22 02:27:05.894547 Registering with agent
[Container] 2024/01/22 02:27:05.894563 Phases found in YAML: 4
[Container] 2024/01/22 02:27:05.894569  POST_BUILD: 3 commands
[Container] 2024/01/22 02:27:05.894574  INSTALL: 5 commands
[Container] 2024/01/22 02:27:05.894578  PRE_BUILD: 5 commands
[Container] 2024/01/22 02:27:05.894581  BUILD: 1 commands
[Container] 2024/01/22 02:27:05.894917 Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED
[Container] 2024/01/22 02:27:05.894934 Phase context status code:  Message: 
[Container] 2024/01/22 02:27:05.984708 Entering phase INSTALL
[Container] 2024/01/22 02:27:05.985252 Running command yarn set version 4.0.2
error This project's package.json defines "packageManager": "yarn@4.0.2". However the current global version of Yarn is 1.22.21.

Presence of the "packageManager" field indicates that the project is meant to be used with Corepack, a tool included by default with all official Node.js distributions starting from 16.9 and 14.19.
Corepack must currently be enabled by running corepack enable in your terminal. For more information, check out https://yarnpkg.com/corepack.

[Container] 2024/01/22 02:27:06.662436 Command did not exit successfully yarn set version 4.0.2 exit status 1
[Container] 2024/01/22 02:27:06.666187 Phase complete: INSTALL State: FAILED
[Container] 2024/01/22 02:27:06.666204 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: yarn set version 4.0.2. Reason: exit status 1

우리 프로젝트는 yarn set version 4.0.2 커맨드를 통해 4.0.2로 yarn 버전 셋팅해 놓고 package.json에 yarn@4.0.2 을 통해서 이 프로젝트는 yarn 4.0.2로 구동되게 하였다.

그런데 오류에는 yarn set이 안되는 것 같은 느낌이였다.
그래서 열심히 검색해본 결과 yarn set version latest --yarn-path 를 대신 사용하면 된다는 글을 보아 시도해 보았다.

[Container] 2024/01/22 02:41:11.747165 Entering phase INSTALL
[Container] 2024/01/22 02:41:11.747646 Running command yarn set version latest --yarn-path
error This project's package.json defines "packageManager": "yarn@4.0.2". However the current global version of Yarn is 1.22.21.

Presence of the "packageManager" field indicates that the project is meant to be used with Corepack, a tool included by default with all official Node.js distributions starting from 16.9 and 14.19.
Corepack must currently be enabled by running corepack enable in your terminal. For more information, check out https://yarnpkg.com/corepack.

[Container] 2024/01/22 02:41:12.379846 Command did not exit successfully yarn set version latest --yarn-path exit status 1
[Container] 2024/01/22 02:41:12.384798 Phase complete: INSTALL State: FAILED
[Container] 2024/01/22 02:41:12.384818 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: yarn set version latest --yarn-path. Reason: exit status 1

❌ 결과는 동일하게 실패다.

오류 내용에 있는 https://yarnpkg.com/corepack 를 읽어보았다.

Corepack은 기본적으로 포함되지 않거나 비활성화 되어 있다고 한다.
corepack enable 을 하기 전에 npm install -g corepack 를 실행하라고 한다.
그래서 코어팩부터 설치해보고 빌드를 진행해보려고 한다.

[Container] 2024/01/22 02:49:08.549105 Entering phase INSTALL
[Container] 2024/01/22 02:49:08.549560 Running command npm install -g corepack

changed 1 package in 1s

[Container] 2024/01/22 02:49:09.844457 Running command yarn set version latest --yarn-path
➤ YN0000: Downloading https://repo.yarnpkg.com/4.0.2/packages/yarnpkg-cli/bin/yarn.js
➤ YN0000: Saving the new release in .yarn/releases/yarn-4.0.2.cjs
➤ YN0000: Done in 0s 75ms

[Container] 2024/01/22 02:49:10.918709 Running command yarn -v
4.0.2

... 중략 ...

[Container] 2024/01/22 02:49:25.928127 Running command yarn build
⚠ No build cache found. Please configure build caching for faster rebuilds. Read more: https://nextjs.org/docs/messages/no-cache
Attention: Next.js now collects completely anonymous telemetry regarding usage.
This information is used to shape Next.js' roadmap and prioritize features.
You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
https://nextjs.org/telemetry

   ▲ Next.js 14.0.4
   - Environments: .env

   Creating an optimized production build ...
 ✓ Compiled successfully
   Linting and checking validity of types ...

... 중략 ...

[Container] 2024/01/22 02:50:30.667113 Phase complete: BUILD State: SUCCEEDED
[Container] 2024/01/22 02:50:30.667136 Phase context status code:  Message: 
[Container] 2024/01/22 02:50:30.724392 Entering phase POST_BUILD
[Container] 2024/01/22 02:50:30.725028 Running command echo Build completed on `date`
Build completed on Mon Jan 22 02:50:30 UTC 2024

🙏 npm install -g corepack 만으로도 yarn build 까지 정상적으로 처리되었다.

Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

0 댓글
Inline Feedbacks
View all comments
TOP