
——记一次Node多版本构建的踩坑记录
又是一天风和日丽的
前端同学嫌弃我Jenkins服务器上的node npm版本跟不上,有的老项目需要10、14的,新项目却需要 18、20的
可问题来了——
Jenkins 服务器本身的 Node 版本,根本没法同时满足两边
但是不能因为 Node 版本问题,耽误开发同学进步啊。
于是,我开始想办法解决这个问题。
一、第一次尝试--nvm
计划在 Jenkins 服务器上安装nvm实现多个 Node 版本共存。但实际很尴尬装不上
:
于是,我们决定引入 Docker,通过容器化方式实现 ,结合Jenkins参数化构建,增加node版本号参数,部署时自由选择对应的版本号的构建方案。
这样一来:
开始动手:Jenkins + Docker Pipeline
我在测试环境试了试
实现方式
[root@test ~]# docker run node:20 node -v
v20.19.3 使用 Jenkins 官方 Docker Pipeline 插件,语法(docker.image().inside)
1、参数化构建,(在构建时选择)
NODE_VERSION 和 BUILD_ENV
我先创建了NODE_VERSION、BUILD_ENV这俩参数
Docker Pipeline -> 安装。
docker.image().inside 了配置片段
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 install、npm run build的流程,放到对应 Node 版本的容器里去跑。 说到底,不管本地开发还是 Jenkins 构建,还是那两条命令
仅此记录一下,下次再遇到不用慌。
感谢你看到这里!👋
欢迎留言交流:
如果你觉得哪里说得不对,或者有更好的做法,欢迎留言指导,一起探讨、共同进步!
期待你的分享!一起进步 💪