2015-02-06 194 views
6

我最近开始使用Gulp.js将我所有的CSS和JavaScript打包为单个文件,然后将其包含在我的Web应用程序中。我的网络应用程序是用Python编写的(使用Flask)。自定义部署到Azure网站

我显然不想跟踪使用git的gulp输出CSS和JS文件(因为它们是构建输出文件)。

我使用推送部署将我的网站部署到Azure网站。也就是说,我只需运行git push azure master,Azure会自动计算出我正在使用Python,设置virtualenv,安装pip依赖关系等。 This article describes how to set this up

这个过程很好用,但是现在我已经开始使用Gulp了,我希望确保在部署网站时在服务器端也生成连接的JavaScript和CSS文件。此外,未来,我希望Azure能够在部署时运行所有测试,并且只有在它们全部通过后才能成功部署。

不幸的是,我还没有找到一个令人满意的解决方案,因为我无法将自定义步骤添加到Azure的自动部署过程中。

我已经尝试使用Kudu(如this blog post建议)编写自定义部署脚本,但这样做会禁用Azure通常执行的所有自动步骤;运行azure site deploymentscript --python仅产生不处理阅读在web.config文件,建立virtualenv或安装依赖一个很基本的库杜部署文件。我没有发现有关如何自己做这件事的文档。我使用默认的自动Azure部署脚本(在我推送代码时生成服务器端,因此我无法自己访问它),因为否则像virtualenv和pip依赖项这样的内容不会被处理。

是否有任何解决方法可用,以便我可以自定义部署脚本(例如运行Gulp),同时仍正确部署Flask?

回答

7

由于Kudu是开源的,在GitHub上可用,我在它的问题跟踪器(link, for anyone interested)中提出了这个问题。代码拥有者非常有帮助,并指出我正在寻求解决方案。

  1. 访问该网站的Kudu服务:yourwebsite.scm.azurewebsites.net
  2. 单击工具>下载部署脚本,获取Azure为您的代码生成的部署脚本(这不限于Flask应用程序)。
  3. (可选)该脚本是Windows批处理脚本。我将它移植到Bash,因为我对它更加熟悉,Azure网站也支持它。
  4. 添加自定义的东西根据自己的喜好:使用咕嘟咕嘟/咕噜建立的东西,运行测试和故障部署(非零错误代码退出)如果任何故障,等等。你应该还记得先检查一样咕嘟咕嘟/咕噜的东西是否是使用npm和适当的package.json文件进行安装。
    • 请注意,您应该只在KuduSync有机会从存储库中复制新文件之前将部署标记为失败,否则它们将最终存在于您的web根文件夹中,你的测试失败了。

这里是我的代码处理Gulp.js片段,任何人谁是有兴趣的。看看由azure site deploymentscript --node关于如何选择正确的节点和NPM版本的例子生成的脚本:

selectNodeVersion 
echo "Invoking \"$NPM_CMD install\"..." 
eval $NPM_CMD install 
exitWithMessageOnError "Could not run 'npm install'. Do you have the necessary privileges?" 
echo "Finished npm install." 

# The path doesn't seem to get set OK. Use this hack to run gulp. 
GULP="node_modules/gulp/bin/gulp.js" 

echo "Running gulp..." 
"$GULP" production 
exitWithMessageOnError "Could not run 'gulp'. Did 'npm install' run OK?" 
echo "Finished gulp." 

不要忘了其实是package.json文件包含所有必要咕嘟咕嘟相关性添加到您的项目。 Azure提供Node.js(和npm),但不提供Gulp.js.希望这可以帮助!

P.S .:请注意,整个过程有点怪异,完全正确的方法是使用持续集成代理。