笔者最近在推动基于模板Jenkins流水线的参数化持续集成、持续发布工作,期间发现Node存在多个版本,有16.14、16.18、18.16等,于是问题来了,怎么用一个镜像兼容多个版本来完成构建步骤呢?
由于之前有使用python的经历,知道virtualenv这个工具,于是开始找多版本Node管理工具,还真有一个比较流行的工具,是NVM。
关于NVM的使用方法可以看github地址:https://github.com/nvm-sh/nvm
下面带来本次目标的实践参考
nvm自己打包一个多版本的node的镜像
Build的时候nvm use 切换版本
https://github.com/nvm-sh/nvm
怎么用一个镜像实现自由切换node版本
docker run -it ubuntu:20.04 bash
cat > /etc/apt/sources.list << EOF
#aliyun
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
EOF
保存,更新源
apt update
apt install curl -y
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
nvm install 16.14
nvm install -g pnpm
nvm install 16.18
nvm install -g pnpm
nvm install 18.16
nvm install -g pnpm
再开一个窗口
docker commit xxxx xxxxx/node:nvm-self
docker push xxxxx/node:nvm-self
然后到jenkins流水线的参数build_command里面加下面几行
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
nvm use ${NODE_VERSION}
同时前面再放一个选择变量NODE_VERSION
值为
16.14
16.18
18.16
整体思路:启动一个ubuntu容器,安装NVM,安装NODE,安装PNPM,提交容器为镜像,上传镜像,jenkins参数增加一个变量,需改原来的build_command参数值。
以上内容是笔者亲自实践,如有帮助请帮忙点个赞。