使用命令行

时间:2016-03-09 10:12:50

标签: azure deployment azure-web-sites azure-webjobs

我在Azure(Azurewebsites)中有多个网站。有些人有网络工作,有些则没有。一个是具有缩小的JS和CSS的SPA应用程序。

我们可以在本地进行打包和构建而不会出现任何问题,但是在完成该过程后如何将文件传输到Azure?

我希望我的部署解决方案具有以下属性:

  1. 通过命令行完全自动化。根本没有GUI或Visual Studio交互。
  2. 能够清除目标目录。在重构之后,我们遇到了陈旧配置和二进制文件的问题。
  3. 在任何部署配置文件中没有任何纯文本密码
  4. 最好使用加密证书对Azure进行身份验证。我们在Azure中安装了管理证书。
  5. 最好不使用FTP,主要是因为它易于编写脚本
  6. 最好为每个项目使用相同的基本脚本,这样我就不必维护四种不同的部署方式。
  7. 我看了很多选项。 Webdeploy似乎最为明显,但很难获得有关如何在部署期间使用证书进行身份验证的说明。使用git进行持续交付似乎不是一个好主意:也许可行,但神奇的“我们将从源代码为您构建所有内容并恢复您的软件包,一切都将是棒棒糖和独角兽”让我感到有点害怕(也可能需要一个我们的存储库结构的主要返工,因为我们不希望每个提交都已部署。是否只支持某些分支的部署?)。 FTP可以工作,但显然需要明文密码。这些可以通过环境注入。

    使用GUI时这是一个非常简单的操作,但从命令行看起来很麻烦。是否有任何等同于unix风格的“发送SSH命令删除所有文件,然后将SCP打包并解压缩”?

    如果没有,最好的选择是什么?

2 个答案:

答案 0 :(得分:1)

我们使用WebDeploy / MSDeploy处理40多种产品,包括Web应用程序,服务,SQL数据库,计划任务等的部署。除了基于证书的身份验证之外,它可以执行您要求的所有操作。

我理解保持密码安全的必要性。有几种选择可能对此有所帮助:

  • 如果有人触发这些,您可以让他们输入密码而不是从文件中读取。
  • 您可以编写一个小型控制台应用程序来读取数据库中的密码并启动部署
  • 您可以在构建/部署代理上使用环境变量来存储密码。
  • 我认为最好的选择是使用azure-powershell cmdlets。在此方法中,您可以下载发布设置(包括Azure管理证书),然后使用Publish-AzureWebsiteProject cmdlet将WebDeploy包部署到Azure。

答案 1 :(得分:0)

你应该看看ProjectKudu

这是Azure中用于管理部署过程的基础机制。虽然有标准脚本可以管理复制和部署过程,但所有这些脚本都可以重写,以便按照您的需要进行部署。

例如,一旦将文件复制到保留目录,您就可以使用xcopy将所需内容传输到wwwroot。我从未使用它,但我怀疑del也可用。

如果需要,您还可以生成自定义构建脚本。这将照顾任何后期处理。

为了将文件放在那里,它可能是一个只有你的部署的git repo的解决方案。

整个项目是开源的,您可以配置自定义kudu安装来管理部署。因此,如果您不想使用git,那么根据需要调整源代码以从存储blob中提取文件将不是一件困难的工作。

对于秘密,您可以将它们添加为环境变量,将它们存储在keyvault中以供您的部署脚本获取(通过Powershell等)或者将kudu部署脚本收集。

我只谈过它可以做什么的基础知识,但它似乎是一个非常灵活的解决方案,应该解决你所有的问题。