.NET8隔离版Linux函数应用使用Publish-AzWebApp发布失败求助
此前在Windows和Linux环境多次使用Publish-AzWebApp发布函数应用均正常,但将函数应用从.NET 6隔离版迁移至.NET 8隔离版后,该命令无法完成Linux函数应用的发布,不过通过SCM/Kudu拖拽发布文件可成功。要求仅通过PowerShell完成发布,且命令需能在Azure托管代理的CI/CD流程中正常运行。
使用的发布命令
Publish-AzWebapp -ResourceGroupName $resourceGroupName -Name $appName -ArchivePath $fileszip -Force -ErrorVariable LASTEXITCODE
命令执行输出信息
GitRemoteName :
GitRemoteUri :
GitRemoteUsername :
GitRemotePassword :
AzureStorageAccounts :
AzureStoragePath : {}
VnetInfo :
State : Running
HostNames : {dmo-nffuncapp.azurewebsites.net}
RepositorySiteName : dmo-nffuncapp
UsageState : Normal
Enabled : True
EnabledHostNames : {dmo-nffuncapp.azurewebsites.net, dmo-nffuncapp.scm.azurewebsites.net}
AvailabilityState : Normal
HostNameSslStates : {dmo-nffuncapp.azurewebsites.net, dmo-nffuncapp.scm.azurewebsites.net}
ServerFarmId : /Microsoft.Web/serverfarms/dmo-asp
Reserved : True
IsXenon : False
HyperV :
LastModifiedTimeUtc : [REDACTED]
SiteConfig : Microsoft.Azure.Management.WebSites.Models.SiteConfig
TrafficManagerHostNames :
ScmSiteAlsoStopped : False
TargetSwapSlot :
HostingEnvironmentProfile :
ClientAffinityEnabled : False
ClientCertEnabled : False
ClientCertMode :
ClientCertExclusionPaths :
HostNamesDisabled : False
CustomDomainVerificationId :
OutboundIpAddresses : [REDACTED]
PossibleOutboundIpAddresses : [REDACTED]
ContainerSize : 1536
DailyMemoryTimeQuota : 0
SuspendedTill :
MaxNumberOfWorkers :
CloningInfo :
ResourceGroup : test-rg
IsDefaultContainer :
DefaultHostName : dmo-nffuncapp.azurewebsites.net
SlotSwapStatus :
HttpsOnly : True
RedundancyMode :
InProgressOperationId :
StorageAccountRequired :
KeyVaultReferenceIdentity :
VirtualNetworkSubnetId :
Identity :
ExtendedLocation :
Id : [REDACTED]
Name : dmo-nffuncapp
Kind : functionapp,linux
Location : East US
Type : Microsoft.Web/sites
调试信息
DEBUG: [REDACTED] - PublishAzureWebAppCmdlet begin processing with ParameterSet 'FromResourceName'.
DEBUG: [REDACTED] - using account id '[REDACTED]'...
DEBUG: [REDACTED] - [ConfigManager] Got nothing from [DisableInstanceDiscovery], Module = [], Cmdlet = []. Returning default value [False].
DEBUG: [REDACTED] - Publish-AzWebApp: C:\Projectfiles\Notification 09-07-2024\NF_DeploymentArtifacts_2.4.0\functionappdeploy\Packages\AzureFunctionApp\functionapptest.ps1:6
Line |
6 | Publish-AzWebapp -ResourceGroupName $resourceGroupName -Name $appName …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| One or more errors occurred. (A task was canceled.)
DEBUG: [REDACTED] - PublishAzureWebAppCmdlet end processing.
解决方案
- 升级Az.Websites模块:旧版本模块可能对.NET 8隔离版支持不足,执行
Update-Module -Name Az.Websites -Force升级至最新版本,确保兼容.NET 8部署逻辑。 - 增加超时时间:.NET 8隔离版应用部署时容器启动耗时更长,默认超时会导致任务取消。添加
-Timeout 300(5分钟)参数,给足部署时间。 - 明确指定Zip部署:添加
-UseZipDeploy参数,避免模块自动选择不兼容的部署方式,修改后的命令:Publish-AzWebapp -ResourceGroupName $resourceGroupName -Name $appName -ArchivePath $fileszip -Force -ErrorVariable LASTEXITCODE -UseZipDeploy -Timeout 300 - 检查应用配置:确认函数应用的
FUNCTIONS_WORKER_RUNTIME设为dotnet-isolated,FUNCTIONS_EXTENSION_VERSION设为~4,避免配置不匹配引发部署中断。 - 验证压缩包结构:确保压缩包根目录包含
bin文件夹、host.json等必要文件,结构符合Linux函数应用部署要求,避免因文件结构错误导致超时。
内容的提问来源于stack exchange,提问作者Saburi

