【问题标题】:How to specify node version for Maven in CDK Builds如何在 CDK 构建中为 Maven 指定节点版本
【发布时间】:2021-10-13 17:26:09
【问题描述】:

当我尝试使用 mvn test 对我的 CDK Java 项目运行单元测试时,我收到一个错误 Node v8.9.1 has reached end-of-life and is not supported.

但 Node v12.22.1 是我当前的版本,我在运行 Maven 之前检查了它。

node --version
v12.22.1
mvn test
....

奇怪的是,如果我通过 IntelliJ GUI 运行 Maven,它就可以工作。

如果这很重要,我已将我的节点版本设置为 nvm。我在 Mac 上。

我需要设置一些环境变量吗? CDK 如何确定使用哪个节点?

有什么想法吗?

谢谢!

完整输出:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!                                                                                  !!

!!  Node v8.9.1 has reached end-of-life and is not supported.                       !!

!!  You may to encounter runtime issues, and should switch to a supported release.  !!

!!                                                                                  !!

!!  As of the current release, supported versions of node are:                      !!

!!  - ^12.7.0                                                                       !!

!!  - ^14.5.0                                                                       !!

!!  - ^16.3.0                                                                       !!

!!                                                                                  !!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

(node:14462) Warning: process.on(SIGPROF) is reserved while debugging

/private/var/folders/nr/dkx1p38s24nb7fx_qgcxggcm0000gn/T/jsii-java-runtime8055040669944096944/lib/program.js:467
            } catch {
                    ^

SyntaxError: Unexpected token {
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:599:28)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

【问题讨论】:

  • 我的 /usr/local/bin/node 是 8.9.1 版。一定是在用那个。 Surefire 插件可能会派生一个新的 JVM,并且它不能遵守 nvm 设置。我忘了说的一件事是cdk deploycdk synth 在本地工作;失败仅在于运行测试。因此,这强化了新 JVM 启动方式的理论。

标签: aws-cdk


【解决方案1】:

这可能有两个原因。

  1. 在您的构建规范中,您没有将runtime env 指定为节点。即使您自己手动安装节点,并且 --version 命令返回它,当命令在您的代码构建上运行时,它也会使用默认值。您必须在您的代码构建 buildspec.yaml 中定义它:
    phases:
      install:
         runtime-versions:
           nodejs: 12

如果您不指定此运行时版本,则任何运行的命令(例如 mvn)不是直接节点命令将自动使用 8.9.1

  1. 假设您已经在构建规范中提供了此内容,那么另一个潜在问题是您的 Codebuild Image。如果您未设置为 Standard2.0 或更高版本,那么您无法使用运行时- 它们将始终默认为节点 8 的基本运行时。(请参阅this reference for docker images on codebuild available)- 除非您真的否则,您应该使用 Ubuntu Standard 5.0。它拥有最新的后端代码,利用 Buildspec 并为您提供最大的控制权。

值得注意的是,如果您使用的是 CDK,并且您没有指定 specific image to use,它会自动默认为 Standard1.0,并且运行时版本将被忽略。更烦人的是,如果您在 Standard1.0 中,它会打印一条警告,指出运行时版本被忽略但不会停止进程......并且由于代码构建忽略大多数命令的 --quiet 标志,它很容易在垃圾邮件。

【讨论】:

  • 我没有使用 CodeBuild,这只是在我的本地笔记本电脑上。我们在 Circle CI 上的构建工作正常,到目前为止只是我的机器有问题。我从未使用过 CodeBuild,而且我对 CDK 很陌生,所以我认为您的 cmets 不适用于我的案例,但我很容易出错,如果是这样,请告诉我。谢谢!
  • 这似乎更像是一个符号链接问题,而不是 CDK 问题。我相信您认识到,正如您所提到的,您已经设置了要使用的 maven 版本,但 CDK 似乎并不尊重这一点 - 有关设置依赖文件的一些信息,请参阅 docs.aws.amazon.com/de_de/cdk/latest/guide/… - 对于您的本地人来说,这可能是不正确的反对你的队友。
【解决方案2】:

Surefire 插件正在使用我的 /usr/local/bin/node,它没有与 nvm 一起安装。那是 8.9.1。我升级了那个节点版本,它可以工作了。

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多