python - 自定义部署到 Azure 网站

标签 python azure deployment automation gulp

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

我显然不想使用 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仅生成一个非常基本的Kudu部署文件,该文件不处理web.config文件中的读取,设置virtualenv 或安装依赖项。我没有找到有关如何自己执行此操作的文档;我使用了默认的自动 Azure 部署脚本(当我推送代码时,该脚本在服务器端生成,因此我无法自己访问它),因为否则不会处理 virtualenv 和 pip 依赖项等内容。

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

最佳答案

由于 Kudu 是开源的并且可以在 GitHub 上获取,因此我在其问题跟踪器 ( link, for anyone interested ) 中提出了这个问题。代码所有者非常有帮助,并为我指出了解决方案。

  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."

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

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

关于python - 自定义部署到 Azure 网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28366550/

相关文章:

python - 使用 PySpark 对多列执行滞后

python - pandas python 中数据帧的随机行会带来不同的回归结果?

tomcat - 使用 Ant 部署到 Geronimo

azure - 启动通用 Azure VM

python - 一个简单的Python部署问题-痛苦的世界

node.js - 在单个端口后面运行多个 sails 应用程序

Python Generator 内存对大量读数有好处吗?

python - 在 pandas DataFrame 中基于 MultiIndex 提取组的组长

sql - 无法打开备份设备 - SQL Server 本地备份数据库到 Azure 存储

Azure Webjob 在 4 分钟后失败