CircleCI配置指定Node版本与实际运行版本不符问题咨询
这是个挺常见的CircleCI配置小坑,我来帮你梳理几个最可能的原因和对应的解决办法:
确认容器是否真的使用了你指定的镜像
有时候配置里的镜像声明可能没生效,比如你有没有在job的docker字段下正确指定镜像?正确的配置结构应该是这样的:jobs: your_job_name: docker: - image: circleci/node:9.10.1 steps: - checkout # 其他步骤... - run: node -v # 可以先在这里直接验证版本,再走SSH另外,SSH连接时要确认自己连的是当前job对应的容器,你可以在CircleCI的job日志里查看容器ID,对比SSH连接的目标容器。
检查系统PATH的优先级
circleci/node镜像里的Node通常安装在/usr/local/bin,但Ubuntu 14系统自带的Node 4.2.6可能在/usr/bin,如果/usr/bin在PATH里的顺序更靠前,就会优先调用旧版本。
你可以在SSH里执行这两个命令验证:which node # 看当前指向的路径 /usr/local/bin/node -v # 直接调用镜像里的Node版本如果是PATH的问题,临时修复可以执行
export PATH=/usr/local/bin:$PATH,也可以在config.yaml的run步骤里提前设置环境变量。排查是否有额外步骤覆盖了Node版本
检查你的config.yaml里有没有通过apt-get安装Node的步骤,比如run: sudo apt-get install -y nodejs——这会把Ubuntu仓库里的旧版本Node装上去,直接覆盖镜像自带的版本。如果有这一步,删掉它就行。尝试清除缓存重建
CircleCI有时候会复用旧的容器缓存,导致没有拉取你指定的最新镜像。你可以在CircleCI控制台触发job时,选择「Rebuild without cache」,看看版本是否恢复正常。
内容的提问来源于stack exchange,提问作者Benny67b

