【问题标题】:Custom Deployment to Azure Websites自定义部署到 Azure 网站
【发布时间】:2015-04-06 15:23:33
【问题描述】:

我最近开始使用Gulp.js 将我所有的 CSS 和 JavaScript 打包到单个文件中,然后将其包含在我的网络应用程序中。我的网络应用是用 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?

【问题讨论】:

    标签: python azure deployment automation gulp


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-08
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多