如何为Azure Web Apps自动安装特定的站点扩展

时间:2015-11-16 16:42:16

标签: azure-web-sites kudu

我理想情况下,当我的代码被推送到scm Kudu站点时,在我的应用程序代码或.deployment文件中声明要安装或更新的特定站点扩展。这可能吗?

具体来说,我希望将Microsoft.ApplicationInsights.AzureWebSites站点扩展作为我部署的所有站点的一部分自动安装,而无需手动浏览到scm站点并从库中安装它。

3 个答案:

答案 0 :(得分:8)

您无法在Kudu git部署中安装网站扩展,但您可以将其作为ARM模板的一部分进行安装。您可以找到完整的示例here

这与任何其他网站配置基本相同。例如设置应用程序设置,应用程序服务层,打开日志记录,WebSockets,......所有这些都在Kudu部署之外,但可以使用具有所有所需站点状态的ARM模板来实现。

答案 1 :(得分:2)

另一种方法是创建一个可以创建SiteExtension文件夹的WebJob,然后将SiteExtension文件复制到该文件夹​​中。作为部署的一部分,您只需要包含webjob。

我们采用类似于Stackify APM从站点扩展安装到Azure Web Apps的方式。站点扩展创建WebJob,WebJob实际上基于某些条件项更新站点扩展applicationHost变换。

答案 2 :(得分:0)

可以使用powershell完成,但它有点hacky(例如使用名为staging的临时插槽):

Write-Host "Setting appsettings for Stackify on $AzureWebSite"

$hash = @{}
$hash['Stackify.ApiKey'] = "$licenceKey"
$hash['Stackify.Environment'] = "$environment"
$hash['Stackify.AppName'] = "$BaseWebAppName"

if ($loadCertificates -eq 'True')
{
    $hash['WEBSITE_LOAD_CERTIFICATES'] = "*"
}

Set-AzureWebsite -Name $AzureWebSite -Slot staging -AppSettings $hash

### Install Extension for Azure App###
Write-Host "Installing Stackify on $AzureWebSite"
$Kudu = "https://" + $AzureWebSite + "-staging.scm.azurewebsites.net/api/extensionfeed" # Here you can get a list for all Extensions available.
$InstallNRURI = "https://" + $AzureWebSite + "-staging.scm.azurewebsites.net/api/siteextensions" # Install API EndPoint

$slot = Get-AzureWebsite $AzureWebSite -Slot staging 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $slot.PublishingUsername,$slot.PublishingPassword))) 
$invoke = Invoke-RestMethod -Uri $Kudu -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method get ###-InFile $filePath -ContentType "multipart/form-data" 
$id = ($invoke | ? {$_.id -match "stackify*"}).id  ### Searching for Stackify ID Extension

try {
    $InstallStackify = Invoke-RestMethod -Uri "$InstallNRURI/$id" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Put
    $Status = ($InstallStackify.provisioningState).ToString() + "|" + ($InstallStackify.installed_date_time).ToString()  ### Status
    Write-Output "Stackify Installation Status : $Status"
}
catch{$_}
Restart-AzureWebsite $AzureWebSite -Slot staging