在 Azure DevOps 管道中为 WebApp 创建部署槽

Mar*_*arc 6 yaml azure azure-devops azure-pipelines

我想从 Azure DevOps 管道执行以下操作:

  • 为现有的 WebApp 创建新的部署槽 ( staging)
  • 将应用程序部署到新插槽
  • 交换staging插槽production
  • 删除以前的production,现在的staging插槽

到目前为止我所拥有的是:

  • 将应用程序部署到新插槽
  • staging与生产交换插槽
  • 删除以前的production,现在的staging插槽

YAML:

- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'BizSpark(...)'
    appType: 'webApp'
    WebAppName: 'foo'
    deployToSlotOrASE: true
    ResourceGroupName: 'Default-WestEurope'
    SlotName: 'staging'
    packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: 'BizSpark(..)'
    Action: 'Swap Slots'
    WebAppName: 'foo'
    ResourceGroupName: 'Default-WestEurope'
    SourceSlot: 'staging'

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: 'BizSpark(..)'
    Action: 'Delete Slot'
    WebAppName: 'foo'
    ResourceGroupName: 'Default-WestEurope'
    Slot: 'staging'
Run Code Online (Sandbox Code Playgroud)

但是,AzureAppServiceManagetask 不提供创建部署槽的方法。

如何才能做到这一点?

Leo*_*SFT 5

在 Azure DevOps 管道中为 WebApp 创建部署槽

恐怕在 Azure DevOps 管道中没有这种开箱即用的方式来为 WebApp 创建部署槽。

作为任务的状态Azure App Service Management,我们可以知道:

Azure 应用服务管理任务用于启动/停止/重启应用服务、交换槽、安装扩展、启用持续监控或启动/停止所有连续的 Web 作业Azure 应用服务上的。

它不支持在 Azure DevOps 管道中为 WebApp 创建部署槽。AFAIK,目前没有其他任务在 Azure DevOps 管道中支持此功能。

作为这个问题的解决方案,就像juunas评论一样,通常这是通过ARM模板部署来实现的

我们可以使用以下 ARM 模板为 Azure 应用服务配置部署槽:

{
    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "siteName": {
            "type": "string"
        },
        "slotName": {
            "type": "string"
        }
    },
    "resources": [
        {
            "apiVersion": "2015-04-01",
            "type": "Microsoft.Web/Sites/Slots",
            "name": "[concat(parameters('siteName'), '/', parameters('slotName'))]",
            "location": "[resourceGroup().location]",
            "properties": {},
            "resources": []
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后,我们可以使用 Azure devops 部署 ARM 模板。

您可以查看此博客此博客以了解更多详细信息。

希望这可以帮助。

  • 我相信这应该是首选答案。资源应该部署在arm模板中,而不是管道本身。插槽是资源的一部分。 (2认同)

小智 5

我可以使用 powershell 和 Microsft Hosted Agent 在 azure devops 管道中创建一个 WebbApp 插槽,这是任务:

根据文档示例

- task: AzureCLI@2
    displayName: Azure CLI   
     inputs:
      azureSubscription: <Name of the Azure Resource Manager service connection>
      scriptType: ps
      scriptLocation: inlineScript
      inlineScript: |
          az --version
          az account show
Run Code Online (Sandbox Code Playgroud)

对于内联脚本,我使用了“az webapp deployment slot create” Azure CLI 命令

az webapp deployment slot create --name
                                 --resource-group
                                 --slot
                                 [--configuration-source]
                                 [--subscription]
Run Code Online (Sandbox Code Playgroud)

这有帮助吗?