我理想情况下,当我的代码被推送到scm Kudu站点时,在我的应用程序代码或.deployment
文件中声明要安装或更新的特定站点扩展。这可能吗?
具体来说,我希望将Microsoft.ApplicationInsights.AzureWebSites
站点扩展作为我部署的所有站点的一部分自动安装,而无需手动浏览到scm站点并从库中安装它。
答案 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