首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >又被嫌弃了|Jenkins服务器系统版本太老跑不动 Node 20?我用 Docker 搞定了Node多版本共存

又被嫌弃了|Jenkins服务器系统版本太老跑不动 Node 20?我用 Docker 搞定了Node多版本共存

作者头像
Python运维开发
发布2025-09-29 14:18:44
发布2025-09-29 14:18:44
13300
代码可运行
举报
文章被收录于专栏:Python运维开发Python运维开发
运行总次数:0
代码可运行

——记一次Node多版本构建的踩坑记录

又是一天风和日丽的

前端同学嫌弃我Jenkins服务器上的node npm版本跟不上,有的老项目需要10、14的,新项目却需要 18、20的

可问题来了——

Jenkins 服务器本身的 Node 版本,根本没法同时满足两边

但是不能因为 Node 版本问题,耽误开发同学进步啊。

于是,我开始想办法解决这个问题。

一、第一次尝试--nvm

计划在 Jenkins 服务器上安装nvm实现多个 Node 版本共存。但实际很尴尬装不上

  • 这台 Jenkins 服务器是 CentOS 7,系统比较老,底层依赖库也旧。
  • 到高版本 Node.js(如 18+、20+)时,出现了系统依赖不兼容问题直接报错,具体是什么忘了,好像是 glibc 版本太低类的反正一看就知道不是能随便升级的…… 升级风险太高,不敢贸然升级果断放弃了

二、尝试用 Docker 跑构建任务

于是,我们决定引入 Docker,通过容器化方式实现 ,结合Jenkins参数化构建,增加node版本号参数,部署时自由选择对应的版本号的构建方案。

这样一来:

  • 想用哪个版本就用哪个版本
  • 互不干扰,嘎嘎香!

开始动手:Jenkins + Docker Pipeline

我在测试环境试了试

实现方式

  • 安装并配置好 了Jenkins
  • 启动 Docker
  • 准备好对应版本的node镜像 获取后我先手动验证了下:
代码语言:javascript
代码运行次数:0
运行
复制
[root@test ~]# docker run node:20 node -v
v20.19.3    

使用 Jenkins 官方 Docker Pipeline 插件,语法(docker.image().inside

1、参数化构建,(在构建时选择)

  • 通过 Jenkins 参数化构建,传入 NODE_VERSIONBUILD_ENV
  • 我先创建了NODE_VERSION、BUILD_ENV这俩参数
图片
图片

2、弄完发现没有 Docker Pipeline 插件跑不起来

咋办,安装呗

  • Jenkins 管理界面;
  • 点击左侧 Manage Jenkins -> Plugins
  • 点击 Available plugins(可选插件)
  • 在搜索框中输入Docker Pipeline -> 安装。
  1. 安装 Docker Pipeline 插件
图片
图片
  1. 安装完成后重启下 Jenkins
  2. 装好之后,就能在 Pipeline 里用 docker.image().inside

配置片段

代码语言:javascript
代码运行次数:0
运行
复制
         stage('PullCode') {
                    steps{ 
                        script{
                        git(
                            credentialsId: '凭据的ID',
                            url: "${giturl}",
                            branch: "${branch}"
                        )
                    }
                }

          stage('NPM打包') {
            steps {
                script {
                    def nodeImage = "node:${NODE_VERSION}"
                    docker.image(nodeImage).inside {
                        sh """
                          echo "Node: \$(node -v)"
                          npm config set registry ${registry_url}
                          npm run build:${env.BUILD_ENV}  
                        """
                    }
                }
            }
        }

⚠️ 踩坑无处不在,我把变量加了个{} ,避免变量名歧义,之前踩过这个坑,这次都给他加上{}了 比如:a_b 和 {a}_b a_b 是一个变量,{a}_b 是“变量 + 字符串”。

效果

图片
图片

执行的时候报了好几次错,不是这有问题就是那有问题,还好一点点通过看日志捣鼓了半天算是执行成功了

其实也没啥的,就是把本地那套 npm installnpm run build 的流程,放到对应 Node 版本的容器里去跑。 说到底,不管本地开发还是 Jenkins 构建,还是那两条命令

仅此记录一下,下次再遇到不用慌。

感谢你看到这里!👋

欢迎留言交流:

如果你觉得哪里说得不对,或者有更好的做法,欢迎留言指导,一起探讨、共同进步!

期待你的分享!一起进步 💪

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python运维开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、尝试用 Docker 跑构建任务
  • 2、弄完发现没有 Docker Pipeline 插件跑不起来
    • 咋办,安装呗
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档