Ansible Playbook执行package.json对应npm install任务失败如何解决
排查步骤
先移除执行命令中的--silent参数,打印完整报错信息定位根因:
- name: 执行npm install(保留完整日志) shell: npm install args: chdir: PATH_TO_PACKAGE.JSON_DIRECTORY register: npm_result environment: PATH: ENVIRONMENT_PATH ignore_errors: true - name: 打印npm执行完整输出 debug: var: npm_result
根据输出的stderr和返回码rc,对应以下常见问题解决:
常见问题解决方案
权限不足报错
普通用户执行时npm缓存目录或项目目录无写入权限,添加--unsafe-perm=true参数即可:# npm模块写法 - name: 安装依赖 npm: path: PATH_TO_PACKAGE.JSON_DIRECTORY state: latest unsafe_perm: true environment: PATH: ENVIRONMENT_PATH # shell模块写法 - name: 安装依赖 shell: npm install --unsafe-perm=true args: chdir: PATH_TO_PACKAGE.JSON_DIRECTORY environment: PATH: ENVIRONMENT_PATH命令不存在报错
Ansible非交互式shell未加载node/npm环境变量(比如用nvm管理版本的场景),直接用npm绝对路径执行,或者手动加载环境配置:# 先在目标机器执行which npm拿到绝对路径,比如为/root/.nvm/versions/node/v18.17.0/bin/npm - name: 安装依赖 shell: /root/.nvm/versions/node/v18.17.0/bin/npm install args: chdir: PATH_TO_PACKAGE.JSON_DIRECTORY依赖拉取超时报错
源访问失败,执行时指定国内镜像源:- name: 安装依赖 shell: npm install --registry=https://registry.npmmirror.com args: chdir: PATH_TO_PACKAGE.JSON_DIRECTORY版本冲突报错
旧的node_modules或lock文件残留导致冲突,安装前先清理:- name: 清理旧依赖文件 shell: rm -rf node_modules package-lock.json args: chdir: PATH_TO_PACKAGE.JSON_DIRECTORY
内容的提问来源于stack exchange,提问作者Rohan Gupta
相关产品推荐
相关产品推荐

