我正在尝试使用Azure的Git部署来构建和打包我的项目。
我创建了以下文件
.deployment
deploy.cmd
Gruntfile.js
package.json
我的.deployment
文件调用deploy.cmd
。 deploy.cmd
通过设置路径来设置环境,以包括Node.js和npm的签入副本。我可以打电话给npm install
就好了。当我调用grunt
时,它似乎执行第一个标准输出消息,然后返回并设置错误返回代码。我没有得到任何其他消息。其他命令似乎运行得很好。
我试过把STDERR弄出来,没有运气。我试过在远程执行控制台下运行,没有运气。我的Gruntfile.js
本地运行就好了。
我缺少一些魔法酱吗?
答案 0 :(得分:15)
这有点旧,但无论如何我都会回答,以防有人遇到这个问题。
首先,在禁用颜色的情况下运行grunt会很有帮助,因为诊断控制台和部署日志都在使用ANSI代码。为此,请运行grunt --no-color
。这应该将STDOUT信息返回到控制台并进入部署日志。
其次,我不建议使用Node或NPM的签入版本。 Windows Azure已经将这些内置于环境中,并且已经针对两者所需的特殊临时路径和缓存路径进行了配置。
Project Kudu是为Azure Deployments提供支持的部署引擎,但您已经知道这一点,因为您有一个.deployment文件。但是,Azure命令行工具[npm install azure-cli --global
]将帮助您构建一些更好的部署脚本,这些脚本将使用Azure预安装的节点和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进入你的{{ 1}}。 (注意:用你需要运行的任何Grunt任务替换'clean common dist'。)
您可能遇到其他一些问题。我在post on my personal blog中写了这个,其中包括您可能遇到的一些问题。