自定义部署到Azure网站
我最近开始使用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?
由于Kudu是开源的,在GitHub上可用,我在它的问题跟踪器(link, for anyone interested)中提出了这个问题。代码拥有者非常有帮助,并指出我正在寻求解决方案。
- 访问该网站的Kudu服务:
yourwebsite.scm.azurewebsites.net
。 - 单击工具>下载部署脚本,获取Azure为您的代码生成的部署脚本(这不限于Flask应用程序)。
- (可选)该脚本是Windows批处理脚本。我将它移植到Bash,因为我对它更加熟悉,Azure网站也支持它。
- 添加自定义的东西根据自己的喜好:使用咕嘟咕嘟/咕噜建立的东西,运行测试和故障部署(非零错误代码退出)如果任何故障,等等。你应该还记得先检查一样咕嘟咕嘟/咕噜的东西是否是使用
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 .:请注意,整个过程有点怪异,完全正确的方法是使用持续集成代理。