我最近开始使用Gulp.js将我的所有CSS和JavaScript打包成单个文件,然后将其包含在我的网络应用中。我的网络应用程序是用Python编写的(使用 Flask )。
我显然不想使用git跟踪Gulp输出CSS和JS文件(因为他们正在构建输出文件)。
我使用push to deploy将我的网站部署到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
只会生成一个非常基本的Kudu部署文件,该文件不会处理web.config
文件中的读取,设置virtualenv
或安装依赖项。我自己没有找到关于如何做到这一点的文件;我使用了默认的自动Azure部署脚本(当我推送代码时会生成服务器端,所以我自己无法访问它),因为其他类似virtualenv和pip依赖的东西都没有被处理。
是否有可用的解决方法,以便我可以在正确部署Flask的同时自定义我的部署脚本(例如运行Gulp)?
答案 0 :(得分:7)
由于Kudu是开源的并且可以在GitHub上使用,因此我在其问题跟踪器(link, for anyone interested)中提出了这个问题。代码所有者非常有帮助,并指出了我的解决方案。
yourwebsite.scm.azurewebsites.net
。npm
和相应的package.json
文件安装。
这是我的代码处理Gulp.js的片段,供所有感兴趣的人使用。查看azure site deploymentscript --node
生成的脚本,了解如何选择正确的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."
不要忘记实际添加一个包含所有必需的Gulp依赖项的package.json
文件到您的项目中。 Azure提供Node.js(和npm)但不提供Gulp.js.希望这有帮助!
P.S。:请注意,整个过程有点过时,完全正确的方法是使用持续集成代理。