在 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

npm install:无法在 Windows 10 中安装依赖项

无法让“npm install -g”在任何包上工作(AppData/Roaming/npm 始终为空)