NodeJS插件验证:Jenkins官方Alpine镜像之LTS版本

在前面的文章中我们验证了Alpine版本的Linux发行版和NodeJS安装包不兼容的情况,并给出了解决的方法。而Jenkins本身也提供Alpine版本的镜像,这篇文章来确认一下目前最新的Alpine版本(2.190.1)的镜像是否支持NodeJS插件。

获取最新lts的alpine版本Jenkins

执行命令:docker pull jenkins/jenkins:lts-alpine

liumiaocn:~ liumiao$ docker pull jenkins:lts-alpine
Error response from daemon: manifest for jenkins:lts-alpine not found
liumiaocn:~ liumiao$ docker pull jenkins/jenkins:lts-alpine
lts-alpine: Pulling from jenkins/jenkins
...省略
f47b1765c187: Pull complete 
Digest: sha256:abbd597e5791e740ea7039951d3f694a65444b708e1c9991a85534d4e38f1bbc
Status: Downloaded newer image for jenkins/jenkins:lts-alpine
liumiaocn:~ liumiao$ 
liumiaocn:~ liumiao$ docker images |grep jenkins |grep lts-alpine
jenkins/jenkins                                 lts-alpine                      8d4feb9f9f15        3 weeks ago         226MB
liumiaocn:~ liumiao$ 

启动Jenkins

执行命令:
docker run -d -p 8080:8080 -p 60000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-alpine

执行日志如下所示:

liumiaocn:~ liumiao$ docker run -d -p 8080:8080 -p 60000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-alpine
6535aece8684557eb085061cd39199201f4237961bf0dfa75885cc1aa8dec15b
liumiaocn:~ liumiao$

设定Jenkins

使用docker logs命令获取如下信息,并填入Jenkins启动页面,然后安装缺省建议的插件。

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

f1a30728e5584561b9081805a0caa8c0

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

当前的版本是2.190.1
在这里插入图片描述

安装并设定NodeJS插件

这里使用Node 10.15.3版
在这里插入图片描述

创建Job并设定

创建一个Free Style的Job并做如下设定,仅仅确认npm和node的版本信息
在这里插入图片描述

结果分析

  • 日志分析
    第一次执行的时候的日志信息如下所示:
Started by user admin
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/nodejs-freestyle-job
Unpacking https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gz to /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3 on Jenkins

可以看到,下载和压缩的nodejs的二进制包的源就是https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gz,而这个显然是64位的基于libc的编译结果。

由于需要从网络上下载并展开此nodejs包,所以会花费一定时间。而一旦下载并完成解压,下面的日志也随之展开。

Started by user admin
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/nodejs-freestyle-job
Unpacking https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gz to /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3 on Jenkins
[nodejs-freestyle-job] $ /bin/sh -xe /tmp/jenkins5559044380616609516.sh
+ npm -v
env: ‘node’: No such file or directory
Build step 'Execute shell' marked build as failure
Finished: FAILURE

从结果中可以很清晰的看到,node -v也同样提示No such file or directory,表明是无法正常运行的。

  • Jenkins的Alpine基础镜像版本
    此Jenkins镜像是基于Alpine的镜像,而Alpine的版本可以从系统中的如下文件予以确认:
liumiaocn:~ liumiao$ docker exec -it mystifying_spence sh
/ $ cat /etc/alpine-release 
3.9.4
/ $

可以看到Alpine的版本是3.9.4,而目前Alpine也没有官方支持libc的特性,所以此nodejs只有在满足所需要的libc的符号链接和函数所有库都有替代的情况下才能够正常运行。

  • 链接库状态确认
/ $ cd /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3/node-v10.15.3-linux-x64/
~/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3/node-v10.15.3-linux-x64 $ ldd ./bin/node
	/lib64/ld-linux-x86-64.so.2 (0x7f4264595000)
	libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f4264595000)
	librt.so.1 => /lib64/ld-linux-x86-64.so.2 (0x7f4264595000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f4264440000)
	libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f4264595000)
	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f426442c000)
	libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f4264595000)
	libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f4264595000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by ./bin/node)
Error relocating ./bin/node: gnu_get_libc_version: symbol not found
Error relocating ./bin/node: __register_atfork: symbol not found
Error relocating ./bin/node: setcontext: symbol not found
Error relocating ./bin/node: makecontext: symbol not found
Error relocating ./bin/node: backtrace: symbol not found
Error relocating ./bin/node: getcontext: symbol not found
~/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3/node-v10.15.3-linux-x64 $
  • 版本确认
    执行node -v和npm -v均无法正常动作,而文件又存在,根本原因就是因为libc下编译的二进制文件在musl支持的环境中运行,自然无法使用。就像我们希望windows下的exe文件能在linux下运行一样,一般是不太可行的。
~/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3/node-v10.15.3-linux-x64 $ ./bin/node -v
sh: ./bin/node: not found
~/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3/node-v10.15.3-linux-x64 $ ./bin/npm -v
env: ‘node’: No such file or directory
~/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3/node-v10.15.3-linux-x64 $ ls bin
node  npm  npx
~/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs10.15.3/node-v10.15.3-linux-x64 $ 

结论

最新的Jenkins的官方的Alpine版本的镜像同样存在这个问题,如果使用了官方镜像同时又希望使用NodeJS插件的情况下,解决方法同样需要前面的文章中提到的如下解决方案:

  • https://liumiaocn.blog.csdn.net/article/details/102587460
淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页