【问题标题】:Grunt fails to run on Azure Web SiteGrunt 无法在 Azure 网站上运行
【发布时间】:2013-12-03 22:07:12
【问题描述】:

我正在尝试使用 Azure 的 Git 部署来构建和打包我的项目。

我已经创建了以下文件

  • .deployment
  • deploy.cmd
  • Gruntfile.js
  • package.json

我的.deployment 文件调用deploy.cmddeploy.cmd 通过设置路径来设置环境以包含 Node.js 和 npm 的签入副本。我可以打电话给npm install 就好了。当我调用grunt 时,它似乎执行到第一个标准输出消息,然后它返回并设置错误返回代码。除此之外,我没有收到任何其他信息。其他命令似乎运行得很好。

我试过用管道输出 STDERR,但没有成功。我尝试在远程执行控制台下运行,那里没有运气。我的Gruntfile.js 在本地运行得很好。

有没有我想念的魔法酱?

【问题讨论】:

  • 当您说“远程执行控制台”时,您指的是什么?尝试从 scm 服务的根目录启动诊断控制台(与 git url 相同的主机名)。它在那里失败了吗?你能粘贴确切的输出吗?此外,如果您可以共享一个最小的 repo,这将有助于调查。沙盒可能会阻止某些内容。
  • @DavidEbbo 是的,我指的是诊断控制台。它在那里失败了。我只是得到了C提示。我正在复制文件,在复制它们后删除其中的一些(不需要,但作为 Git 子模块的一部分),运行一些模板并解析环境变量。非常标准的东西。沙盒会阻止哪些分类的事物?
  • 沙盒块到底有哪些可能是微妙的。您可能还想查看诊断转储 (github.com/projectkudu/kudu/wiki/…),其中可能包含更多信息。如果您有任何方法可以共享一个最小的 repo,让我们准确地看到您所看到的,我们应该能够确定发生了什么。

标签: node.js azure gruntjs azure-web-app-service kudu


【解决方案1】:

这有点老了,但无论如何我都会回答以防万一有人遇到这个问题。


首先,在禁用颜色的情况下运行 grunt 会很有帮助,因为诊断控制台和部署日志都难以处理 ANSI 代码。为此,请运行 grunt --no-color。这应该会将 STDOUT 信息返回到控制台和部署日志中。

其次,我不建议使用 Node 或 NPM 的签入版本。 Windows Azure 已经在环境中内置了这些内容,并且已经针对特殊临时路径和缓存路径进行了配置,以使两者都能以最佳状态运行。

Project Kudu 是支持 Azure 部署的部署引擎,但您已经知道这一点,因为您有一个 .deployment 文件。但是,Azure 命令行工具 [npm install azure-cli --global] 将帮助您搭建一些更好的部署脚本,这些脚本将使用 Azure 的预安装 Node 和 NPM 设置。

azure site deploymentscript –-node

将为您提供基本节点脚本。

从那里开始,需要对deploy.sh 进行一些修改,以使其可靠地执行 Grunt。在deploy.sh 中有一个#Deployment 部分。将其内容替换为以下内容:

# Deployment
# ----------

echo Handling node.js grunt deployment.

# 1. Select node version
selectNodeVersion

# 2. Install npm packages
if [ -e "$DEPLOYMENT_SOURCE/package.json" ]; then
  eval $NPM_CMD install
  exitWithMessageOnError "npm failed"
fi

# 3. Install bower packages
if [ -e "$DEPLOYMENT_SOURCE/bower.json" ]; then
  eval $NPM_CMD install bower
  exitWithMessageOnError "installing bower failed"
  ./node_modules/.bin/bower install
  exitWithMessageOnError "bower failed"
fi

# 4. Run grunt
if [ -e "$DEPLOYMENT_SOURCE/Gruntfile.js" ]; then
  eval $NPM_CMD install grunt-cli
  exitWithMessageOnError "installing grunt failed"
  ./node_modules/.bin/grunt --no-color clean common dist
  exitWithMessageOnError "grunt failed"
fi

# 5. KuduSync to Target
"$KUDU_SYNC_CMD" -v 500 -f "$DEPLOYMENT_SOURCE/dist" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;.deployment;deploy.sh"
exitWithMessageOnError "Kudu Sync to Target failed"

这将运行 npm install,然后是 bower install(如果 bower.json 存在),然后是 grunt clean common dist(如果 Gruntfile.js 存在),最后是 KuduSync 到您的 /wwwroot。 (注意:将 'clean common dist' 替换为您需要运行的任何 Grunt 任务。)

您可能会遇到其他一些问题。我将其写在post on my personal blog 中,其中包括您可能遇到的一些问题。

【讨论】:

  • Jay,在我使用 Git 部署之后,是否可以使用此方法让 Azure 网站使用 Karma 运行我的测试,而不必自己运行它们(类似于 Travis-CI)?
  • 感谢您提供示例。我还查看了相关的博客文章,但没有找到与我的问题相关的任何内容。我将 bower 和 grunt 步骤复制到了 deploy.sh 文件中。部署时,我在部署日志“grunt-cli: The grunt command line interface”中收到此错误消息。 (v0.1.13) 网站部署过程中发生错误。 grunt failed' 有什么想法吗?
  • azure site deploymentscript --node 在我的例子中生成一个 deploy.cmd 文件。这是否意味着这篇文章现在已经过时了?!
  • @Vaibhav 不,您正在 Windows 上生成。它在 OS X 上制作 bash 文件,在 Windows 上制作等效的批处理文件。这些示例都恰好在 Bash 中,但可以在任一平台上完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多