Azure网站的自定义部署

And*_*san 6 python deployment automation azure gulp

我最近开始使用Gulp.js将我的所有CSS和JavaScript打包成单个文件,然后将其包含在我的Web应用程序中.我的网络应用程序是用Python编写的(使用Flask).

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

我使用push to deploy将我的网站部署到Azure网站.也就是说,我只是运行git push azure master,Azure自动确定我正在使用Python,设置virtualenv,安装pip依赖项等等.本文介绍如何进行此设置.

这个过程很有效,但是现在我已经开始使用Gulp,我想确保每当我部署网站时,也会在服务器端生成连接的JavaScript和CSS文件.

此外,在将来,我希望Azure在部署时运行所有测试,并且只有在它们全部通过时才能成功部署.

遗憾的是,我还没有为此工作流找到令人满意的解决方案,因为我无法为Azure的自动部署过程添加自定义步骤.

我曾尝试使用Kudu编写自定义部署脚本(正如此博客文章所建议的那样),但这样做会禁用Azure通常执行的所有自动步骤; 运行azure site deploymentscript --python只生成一个非常基本的Kudu部署文件,该web.config文件不处理文件中的读取,设置virtualenv或安装依赖项.我自己没有找到关于如何做到这一点的文件; 我使用默认的自动Azure部署脚本(当我推送代码时会生成服务器端,所以我自己无法访问它),因为不会处理像virtualenv和pip依赖项这样的东西.

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

And*_*san 7

由于Kudu是开源的并且可以在GitHub上获得,因此我在其问题跟踪器中提出了这个问题(链接,对于任何感兴趣的人).代码所有者非常有帮助,并指出我的解决方案.

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

这是我的代码处理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."
Run Code Online (Sandbox Code Playgroud)

不要忘记实际添加package.json包含所有必需的Gulp依赖项的文件到项目中.Azure提供Node.js(和npm)但不提供Gulp.js. 希望这可以帮助!

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