Jenkins - env: 'node': 没有这个文件或目录

10

我有一个使用https://github.com/shierro/jenkins-docker-examples/tree/master/05-aws-ecs配置的Jenkins服务器。

我正在使用一个简单的Jenkinsfile和jenkins NodeJS插件运行一个Blue Ocean流水线。

pipeline { 
  agent any 

  tools {
    nodejs 'node10'
  }

  stages {
    stage ('Checkout Code') {
      steps {
        checkout scm
      }
    }
    stage ('Install dependencies') {
      steps {
        sh "echo $PATH"
        sh "npm install"
      }
    }
  }
}

我确保添加了全局工具node10,并在上面使用了它:

图像描述

当管道到达脚本sh "npm install"时,我遇到了以下错误:

图像描述

这是echo $PATH命令的输出结果:

图像描述

所以我认为这不是路径问题。

而且,它也无法添加全局包:

图像描述

以下信息可能有助于解决问题:

  • Docker Jenkins 服务器:FROM jenkins/jenkins:2.131-alpine
  • Blue Ocean 版本:1.7.0
  • NodeJS 插件:1.2.6
  • 已经尝试多次重新启动服务器

有什么想法,为什么 Jenkins 服务器不知道 node 的位置?

非常感谢您的帮助!


3
我尝试在本地的Jenkins(没有使用docker)上运行稍微缩减过的代码片段,它可以正常工作。也许是docker设置出了问题?在构建日志中,你是否看到Node实际上已被下载并解压到路径指向的那个文件夹中? - Joerg S
1
@JoergS 感谢您的见解 - 这是一个可能性,也许alpine版本与插件不兼容?在管道步骤中没有显示要下载的构建日志,但我看到node可执行文件已经下载到路径/var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node10/bin。我将尝试使用jenkins / jenkins:lts镜像并回来。 - Theo
嘿,@JoergS,你可以发布一个答案,这样我就可以给你一些积分了 :) - Theo
@Theo:谢谢你的建议。不过我觉得这更像是一个合作的努力 :) 如果你喜欢的话,可以给我的评论点赞。我觉得这已经足够给我带来荣誉了。 - Joerg S
1
感谢您发布了非常详细的问题。通过查看良好配置的环境和描述,我成功解决了我的问题。 - negrotico19
显示剩余3条评论
5个回答

9

感谢@JoergS的一些见解!在这种情况下,罪魁祸首是:使用阿尔卑斯山映像作为Docker基础。因此,从jenkins / jenkins:2.131-alpine切换到jenkins / jenkins:2.131解决了NodeJS插件问题。


2
我的问题最终出在jenkinsci/blueocean镜像上。我成功地用jenkins/jenkins:lts替换了该镜像,NodeJS插件开始按预期工作。 - Mitch Downey

2
我曾经遇到过jenkinsci/blueocean的同样问题,我通过在docker内部使用以下命令安装nodejs(而不是作为jenkins插件)来解决了这个问题:

apk add nodejs

翻译后的内容:最初的回答中提到,作者曾经在jenkinsci/blueocean中遇到过相同的问题。作者通过在docker内部使用上述命令安装nodejs(而不是作为jenkins插件)来解决了这个问题。

我也在运行jenkinsci/blueocean并遇到了同样的问题。您能否详细提供解决方案?这将非常有帮助。 - mrSaraf

1

我在使用jenkinsci/blueocean时遇到了同样的问题,不需要jenkins nodejs插件。

pipeline { 
  agent any 

  stages {
    stage ('Checkout Code') {
      steps {
        checkout scm
      }
    }
    stage ('Install dependencies') {
      steps {
        sh "apk add nodejs"
        sh "echo $PATH"
        sh "npm install"
      }
    }
  }
}

0
创建一个符号链接,命令如下:
sudo ln -s /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node/bin/node /usr/bin/node

0

我想强调一下 Mitch Downey 的评论,它不仅仅是一条评论,因为在花费了4个小时没有解决问题之后,这条评论帮助我解决了问题

我的问题最终与 jenkinsci/blueocean 镜像有关。我只需将该镜像替换为 jenkins/jenkins:lts,NodeJS 插件就能按预期工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接