1

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

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

4

3 回答 3

8

您不能将站点扩展安装为 Kudu git 部署的一部分,但您可以将其作为 ARM 模板的一部分进行。您可以在此处找到完整的示例。

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

于 2015-11-16T17:42:17.343 回答
2

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

我们对如何将 Stackify APM 从站点扩展安装到 Azure Web 应用程序做了类似的事情。站点扩展创建一个 WebJob,WebJob 实际上根据一些条件项更新站点扩展 applicationHost 转换。

于 2015-11-18T04:57:39.490 回答
0

它可以使用 powershell 来完成,但它有点 hacky(例如使用名为 staging 的 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 
于 2018-03-15T20:45:49.993 回答