自定义部署到Azure网站

6
我最近开始使用 Gulp.js 将所有的 CSS 和 JavaScript 打包成单个文件,然后在我的 Web 应用程序中引入。我的 Web 应用程序是使用 Python (使用 Flask) 编写的。
显然,我不想使用 git 跟踪 Gulp 输出的 CSS 和 JS 文件(因为它们是构建输出文件)。
我使用 push to deploy 将网站部署到 Azure Websites 上。也就是说,我只需运行 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?

1个回答

7
由于Kudu是开源的并且在GitHub上可用,我已经在其问题跟踪器中提出了这个问题(链接,供任何有兴趣的人)。代码所有者非常乐意帮助并指向了一个解决方案。
  1. 访问网站的 Kudu 服务: yourwebsite.scm.azurewebsites.net
  2. 单击“工具” > “下载部署脚本”,获取 Azure 为您的代码生成的部署脚本(不仅限于 Flask 应用程序)。
  3. (可选)该脚本是 Windows 批处理脚本。我将其移植到 Bash,因为我更熟悉它,并且 Azure 网站也支持它。
  4. 按照自己的喜好添加自定义内容:使用 Gulp/Grunt 构建内容、运行测试并在任何测试失败时使部署失败(以非零错误代码退出),等等。您还应该记得首先使用 npm 和适当的 package.json 文件检查是否安装了 Gulp/Grunt 等内容。
    • 请注意,在 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。希望这可以帮到您!
附言:请注意,整个过程有点 hacky,完全正确的方法是使用持续集成代理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接