使用Quarkus与Bicep部署Azure Function时DeployFunctionAppTask空指针异常求助
我正在用Bicep模板和Quarkus框架部署Azure Function App,但部署失败,报错信息如下:
任务':quarkus:deploy'执行失败。
io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkus.azure.functions.deployment.AzureFunctionsDeployCommand#deploy threw an exception: java.lang.NullPointerException
at com.microsoft.azure.toolkit.lib.appservice.task.DeployFunctionAppTask.doExecute(DeployFunctionAppTask.java:86)
at io.quarkus.azure.functions.deployment.AzureFunctionsDeployCommand.deployArtifact(AzureFunctionsDeployCommand.java:355)
at io.quarkus.azure.functions.deployment.AzureFunctionsDeployCommand.deploy(AzureFunctionsDeployCommand.java:120)
...
堆栈跟踪显示DeployFunctionAppTask.doExecute方法内存在空值使用情况,怀疑和缺失的配置或环境变量有关。
已采取的排查步骤:
- 验证存储账户名称和密钥已正确获取;
- 确认
AzureWebJobsStorage和FUNCTIONS_WORKER_RUNTIME环境变量已在流水线和函数应用中设置; - 确认Bicep模板已部署所有必需资源并包含
dependsOn以避免竞争条件; - 使用Gradle的
--debug和--stacktrace选项运行部署,但未找到空指针异常的明确原因。
请问:
- 什么原因会导致
DeployFunctionAppTask.doExecute方法出现空指针异常? - 使用Quarkus部署Azure Function App时,是否还有其他可能遗漏的配置或环境变量?
- 如何进一步调试以确定根本原因?
@FunctionName("GetReportsByAirportCode") fun getReportsByAirportCode( @HttpTrigger( name = "req", methods = [HttpMethod.GET], authLevel = AuthorizationLevel.ANONYMOUS, route = "v1/reports/by-airport-code" ) request: HttpRequestMessage<Any>, context: ExecutionContext ): HttpResponseMessage { return try { val bearerToken = request.headers["authorization"] ?: return unauthorizedResponse(request, "Missing Authorization Header") val profile = authService.validateAccessTokenAndGetProfileRequest(bearerToken) val query = request.queryParameters["query"] val page = request.queryParameters["page"]?.toIntOrNull() ?: -1 val size = request.queryParameters["size"]?.toIntOrNull() ?: -1 if (page < 0 || size < 0 || size > maxPageSize) { return badRequestResponse(request, "Invalid parameters") } val assignedAirports = authService.getAssignedAirports(bearerToken) if (assignedAirports.isEmpty()) { return forbiddenResponse(request, "User is not assigned to any airports") } val reports = reportRepository.findByAirportCodes(page, size, assignedAirports, query) request.createResponseBuilder(HttpStatus.OK) .header("Content-Type", "application/json") .body(reports) .build() } catch (e: Exception) { context.logger.severe("Error fetching reports: ${e.message}") e.toResponse(request) } }
内容的提问来源于stack exchange,提问作者FaheDevvs

