经验证,该问题在使用Jenkins官方文档中推荐的docker镜像jenkinsci/blueocean才会出现。
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
改用最新的Jenkins docker镜像就不会遇到:
我安装的是最新的Jenkins docker镜像:
docker pull jenkins/jenkins:lts
然后运行镜像:
docker run \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts
注意
docker run时,镜像名为jenkins/jenkins:lts,而不是jenkins/jenkins。两者不同。
为什么jenkinsci/blueocean镜像会出现这个问题还未定位到。
但在试错的过程中有如下发现:
jenkinsci/blueocean镜像基于Alpine Linux系统;jenkins/jenkins:lts基于Debian系统jenkinsci/blueocean的shell是ash,即阉割版的bash;而jenkins/jenkins:lts时完整的bash。可通过vi /etc/passwd命令查看jenkinsci/blueocean镜像无法通过./node来运行(Ubuntu/Debian可以)。因此怀疑jenkinsci/blueocean镜像的shell无法运行Node支持程序。Alpine Linux系统中安装bash,但是还是不行。至此,我只能怀疑是jenkinsci/blueocean镜像采用的Alpine Linux系统的问题。按理来说,Alpine Linux系统是可以安装使用NodeJS的,由于我只是使用过Ubuntu,所以不能确定。所以大概率是jenkinsci/blueocean镜像封装Alpine Linux系统时本身的BUG。
目前,通过替换Jenkins Docker的镜像可以避免env node No such file or directory问题。但是为什么jenkinsci/blueocean会出现这个问题,我并没有定位到。期待大佬们的解惑。