{"record":{"id":"72874d059c821d9e","repo":"jenkinsci/jenkins","slug":"no-such-plugin-0","errorCode":null,"errorMessage":"No such plugin: {0}","messagePattern":"No such plugin: (.+?)","errorType":"validation","errorClass":"Failure","httpStatus":null,"severity":"warning","filePath":"core/src/main/java/hudson/PluginManager.java","lineNumber":1756,"sourceCode":"                    }\n                    String pluginName = n.substring(0, index);\n                    String siteName = n.substring(index + 1);\n                    UpdateSite.Plugin plugin = getPlugin(pluginName, siteName);\n                    // There could be cases like:\n                    // 'plugin.ambiguous.updatesite' where both\n                    // 'plugin' @ 'ambiguous.updatesite' and 'plugin.ambiguous' @ 'updatesite' resolve to valid plugins\n                    if (plugin != null) {\n                        if (p != null) {\n                            throw new Failure(\"Ambiguous plugin: \" + n);\n                        }\n                        p = plugin;\n                    }\n                    index = n.indexOf('.', index + 1);\n                }\n            }\n\n            if (p == null) {\n                throw new Failure(\"No such plugin: \" + n);\n            }\n            Future<UpdateCenter.UpdateCenterJob> jobFuture = p.deploy(dynamicLoad, correlationId, batch, false);\n            installJobs.add(jobFuture);\n        }\n\n        final Jenkins jenkins = Jenkins.get();\n        final UpdateCenter updateCenter = jenkins.getUpdateCenter();\n\n        if (dynamicLoad) {\n            installJobs.add(updateCenter.addJob(updateCenter.new CompleteBatchJob(batch, start, correlationId)));\n        }\n\n        final Authentication currentAuth = Jenkins.getAuthentication2();\n\n        if (!jenkins.getInstallState().isSetupComplete()) {\n            jenkins.setInstallState(InstallState.INITIAL_PLUGINS_INSTALLING);\n            updateCenter.persistInstallStatus();\n            new Thread(() -> {","sourceCodeStart":1738,"sourceCodeEnd":1774,"githubUrl":"https://github.com/jenkinsci/jenkins/blob/2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc/core/src/main/java/hudson/PluginManager.java#L1738-L1774","documentation":"Failure thrown when the requested plugin name does not match any plugin in any configured update center after all dot-split attempts are exhausted. The plugin identifier p remains null after the parsing loop.","triggerScenarios":"A user or API call specifies a plugin short name that does not exist in any registered update site, or the update center metadata has not been refreshed/synced.","commonSituations":"Typo in the plugin name, plugin has been removed/archived from the update center, update center JSON is stale or unreachable (offline Jenkins, proxy blocking downloads), or the update site URL is misconfigured.","solutions":["Verify the plugin name against https://plugins.jenkins.io/.","Force an update center refresh: Jenkins.get().getUpdateCenter().updateAllSites().","Check network connectivity and proxy settings for update center access.","Ensure the correct update site URL is configured in Manage Jenkins > Plugins > Advanced."],"exampleFix":"// before\n// install request for 'nonexistent-plugin'\n\n// after — refresh sites then verify\nUpdateCenter uc = jenkins.getUpdateCenter();\nuc.updateAllSites().get(); // refresh metadata\nif (uc.getPlugin(\"plugin-name\", \"default\") == null) {\n    throw new IllegalArgumentException(\"Plugin not found in any update site\");\n}","handlingStrategy":"validation","validationCode":"// Refresh update centers then check\nJenkins.get().getUpdateCenter().updateAllSites().get(30, TimeUnit.SECONDS);\nUpdateSite.Plugin p = jenkins.getUpdateCenter().getPlugin(pluginName, \"default\");\nif (p == null) {\n    throw new IllegalArgumentException(\"No such plugin: \" + pluginName);\n}","typeGuard":null,"tryCatchPattern":"try {\n    // plugin install API call\n} catch (Failure f) {\n    if (f.getMessage().startsWith(\"No such plugin\")) {\n        listener.error(\"Plugin not found. Refreshing update sites...\");\n        jenkins.getUpdateCenter().updateAllSites().get();\n    } else {\n        throw f;\n    }\n}","preventionTips":["Verify plugin names against https://plugins.jenkins.io/.","Ensure update center sites are reachable and metadata is refreshed.","Check proxy/firewall settings for update center access."],"tags":["plugin-manager","update-center","not-found","validation"],"backgroundTag":null,"analyzedSha":"2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc","analyzedAt":"2026-08-14T07:07:15.274Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}