code: @SuppressWarnings("deprecation")
      public final void doBuild(StaplerRequest req, StaplerResponse rsp, @QueryParameter TimeDuration delay) throws IOException, ServletException {
          if (delay == null) {
              delay=new TimeDuration(TimeUnit.MILLISECONDS.convert(asJob().getQuietPeriod(), TimeUnit.SECONDS));
          }
  
          if (!asJob().isBuildable()) {
              throw HttpResponses.error(SC_CONFLICT, new IOException(asJob().getFullName() + " is not buildable"));
          }
  
          // if a build is parameterized, let that take over
          ParametersDefinitionProperty pp = asJob().getProperty(ParametersDefinitionProperty.class);
          if (pp != null && !req.getMethod().equals("POST")) {
              // show the parameter entry form.
              req.getView(pp, "index.jelly").forward(req, rsp);
              return;
          }
  
          hudson.model.BuildAuthorizationToken.checkPermission(asJob(), asJob().getAuthToken(), req, rsp);
  
          if (pp != null) {
              pp._doBuild(req, rsp, delay);
              return;
          }
  
  
          Queue.Item item = Jenkins.getInstance().getQueue().schedule2(asJob(), delay.getTimeInSeconds(), getBuildCause(asJob(), req)).getItem();
          if (item != null) {
              rsp.sendRedirect(SC_CREATED, req.getContextPath() + '/' + item.getUrl());
          } else {
              rsp.sendRedirect(".");
          }
      }
docs: Standard implementation of {@link ParameterizedJob#doBuild}.