在 Windows 上使用 npm install 时,Jenkins 脚本过早退出
Posted
技术标签:
【中文标题】在 Windows 上使用 npm install 时,Jenkins 脚本过早退出【英文标题】:Jenkins script quitting prematurely when using npm install on Windows 【发布时间】:2013-05-27 05:57:00 【问题描述】:在我的 Jenkins 工作中,我想使用 Grunt 构建一个 javascript 应用程序。 Jenkins 构建脚本会创建一个构建目录(如果它尚不存在),更改该目录并运行:
npm install grunt
npm install grunt-zip
grunt --gruntfile=[something]
(当然grunt-cli
是全局安装的。)当我构建作业时,第一条语句会导致 Grunt 和依赖项按预期被拉下。但是,作业随后成功终止:
Archiving artifacts
No emails were triggered.
Finished: SUCCESS
第二个npm install
没有运行。知道为什么脚本在运行 npm install
后终止,而不是继续执行后续语句吗?
【问题讨论】:
如果您在 package.json 中使用 devDependencies 并通过单个“npm install”将它们全部拉入,会有什么不同吗? 其实我刚刚想出了这个。npm
被实现为批处理文件(使用 bash shell),因此需要使用 call
从 Jenkins 脚本中调用它,如下所示:call npm install grunt
。
【参考方案1】:
对于未来的谷歌员工:
为此使用命令链。
这有效: npm install && npm install install grunt-zip
这不起作用: npm 安装 npm install grunt-zip
【讨论】:
【参考方案2】:我建议不要使用本地 grunt / nodejs 安装,而是让 jenkins 为您执行此操作!
这更容易,意味着与系统特定安装和变量的耦合更少。
步骤:
a) 使用 nodejs jenkins 插件 + 让它在 machine/grunt-cli 上安装 nodejs -> Jenkins integration with Grunt
b) 使用所需的任何 nodejs 依赖项填充您的 package.json,例如 grunt/grunt-zip 等
c) 运行 grunt 时,只需在“grunt”命令之前执行“npm update”
这样你就不用显式安装 npm 了,它都是从你的 package.json 配置的,你的构建脚本会不那么脆弱,你的开发人员可以使用与构建服务器相同的步骤,例如“npm update;grunt”本地与构建服务器相同
【讨论】:
【参考方案3】:所以事实证明npm
是一个批处理文件,而不是可执行文件,因此需要使用 Jenkins 脚本中的call
调用它:
call npm install grunt
【讨论】:
请注意,此仅适用于 Windows。 这也适用于调用 grunt以上是关于在 Windows 上使用 npm install 时,Jenkins 脚本过早退出的主要内容,如果未能解决你的问题,请参考以下文章
需要 node-gyp 的 npm install 在 Windows 上失败
我正在尝试使用“npm install mongodb”在 Windows 8 机器上为节点 js express 安装 MongoDB,出现以下错误
某些软件包(sqlite3、socket.io)的 npm install 在 Windows 7 上失败并出现错误 MSB8020
npm install -g generator-jhipster Windows 问题与 python