【问题标题】:Jenkins script quitting prematurely when using npm install on Windows在 Windows 上使用 npm install 时,Jenkins 脚本过早退出
【发布时间】: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

标签: node.js jenkins npm gruntjs


【解决方案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
      猜你喜欢
      • 2019-09-30
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 2019-06-29
      • 2018-07-01
      • 2019-08-26
      • 2017-03-10
      • 2012-01-25
      相关资源
      最近更新 更多