{"record":{"id":"413811e9e24d7f04","repo":"jenkinsci/jenkins","slug":"no-such-update-center-0","errorCode":null,"errorMessage":"No such update center: {0}","messagePattern":"No such update center: (.+?)","errorType":"validation","errorClass":"Failure","httpStatus":null,"severity":"warning","filePath":"core/src/main/java/hudson/PluginManager.java","lineNumber":1811,"sourceCode":"                    break;\n                }\n                updateCenter.persistInstallStatus();\n                if (!failures) {\n                    try (ACLContext acl = ACL.as2(currentAuth)) {\n                        InstallUtil.proceedToNextStateFrom(InstallState.INITIAL_PLUGINS_INSTALLING);\n                    }\n                }\n            }).start();\n        }\n\n        return installJobs;\n    }\n\n    @CheckForNull\n    private UpdateSite.Plugin getPlugin(String pluginName, String siteName) {\n        UpdateSite updateSite = Jenkins.get().getUpdateCenter().getById(siteName);\n        if (updateSite == null) {\n            throw new Failure(\"No such update center: \" + siteName);\n        }\n        return updateSite.getPlugin(pluginName);\n    }\n\n    /**\n     * Bare-minimum configuration mechanism to change the update center.\n     */\n    @RequirePOST\n    public HttpResponse doSiteConfigure(@QueryParameter String site) throws IOException {\n        Jenkins hudson = Jenkins.get();\n        hudson.checkPermission(Jenkins.ADMINISTER);\n        UpdateCenter uc = hudson.getUpdateCenter();\n        PersistedList<UpdateSite> sites = uc.getSites();\n        sites.removeIf(s -> s.getId().equals(UpdateCenter.ID_DEFAULT));\n        sites.add(new UpdateSite(UpdateCenter.ID_DEFAULT, site));\n\n        return new HttpRedirect(\"advanced\");\n    }","sourceCodeStart":1793,"sourceCodeEnd":1829,"githubUrl":"https://github.com/jenkinsci/jenkins/blob/2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc/core/src/main/java/hudson/PluginManager.java#L1793-L1829","documentation":"Failure thrown by getPlugin(pluginName, siteName) when the specified update site ID does not match any UpdateSite registered in the UpdateCenter. The siteName is extracted from the plugin identifier's dot-split.","triggerScenarios":"A plugin install request references an update site by ID that has not been configured or is misspelled, e.g., 'plugin@nonexistent-site' or a dot-split producing an unknown site name.","commonSituations":"Update site was removed or renamed, the site ID is mistyped, or a custom update center was not properly registered via Manage Jenkins > Plugins > Advanced.","solutions":["List configured update sites: Jenkins.get().getUpdateCenter().getSiteNames() and verify the ID.","Add the missing update site in Manage Jenkins > Plugins > Advanced > Update Site.","Correct the plugin identifier to use a valid update site name."],"exampleFix":"// before — references unknown site\n// 'plugin.bad-site-id'\n\n// after — use a registered site\nList<String> sites = jenkins.getUpdateCenter().getSiteNames();\n// verify 'default' exists\nUpdateSite.Plugin p = jenkins.getUpdateCenter()\n    .getById(\"default\").getPlugin(\"plugin\");","handlingStrategy":"validation","validationCode":"List<String> siteNames = jenkins.getUpdateCenter().getSiteNames();\nif (!siteNames.contains(siteName)) {\n    throw new IllegalArgumentException(\"No such update center: \" + siteName + \". Available: \" + siteNames);\n}","typeGuard":null,"tryCatchPattern":"try {\n    // plugin install with site reference\n} catch (Failure f) {\n    if (f.getMessage().startsWith(\"No such update center\")) {\n        listener.error(\"Update site not configured: \" + f.getMessage());\n        listener.error(\"Available sites: \" + jenkins.getUpdateCenter().getSiteNames());\n    } else {\n        throw f;\n    }\n}","preventionTips":["Verify update site IDs exist in Manage Jenkins > Plugins > Advanced before referencing them.","Register custom update centers before deploying plugins from them."],"tags":["plugin-manager","update-center","not-found","configuration"],"backgroundTag":null,"analyzedSha":"2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc","analyzedAt":"2026-08-14T07:07:15.274Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}