diff --git a/core/src/main/java/hudson/model/Build.java b/core/src/main/java/hudson/model/Build.java
index 7119f0c5bc..f2d2380197 100644
--- a/core/src/main/java/hudson/model/Build.java
+++ b/core/src/main/java/hudson/model/Build.java
@@ -29,6 +29,8 @@ import hudson.tasks.BuildStep;
import hudson.tasks.BuildTrigger;
import hudson.tasks.BuildWrapper;
import hudson.tasks.Builder;
+import hudson.tasks.Recorder;
+import hudson.tasks.Notifier;
import java.io.File;
import java.io.IOException;
@@ -41,6 +43,39 @@ import java.util.logging.Logger;
/**
* A build of a {@link Project}.
*
+ *
Steps of a build
+ *
+ * Roughly speaking, a {@link Build} goes through the following stages:
+ *
+ *
+ * - SCM checkout
+ *
- Hudson decides which directory to use for a build, then the source code is checked out
+ *
+ *
- Pre-build steps
+ *
- Everyone gets their {@link BuildStep#prebuild(AbstractBuild, BuildListener)} invoked
+ * to indicate that the build is starting
+ *
+ *
- Build wrapper set up
+ *
- {@link BuildWrapper#setUp(AbstractBuild, Launcher, BuildListener)} is invoked. This is normally
+ * to prepare an environment for the build.
+ *
+ *
- Builder runs
+ *
- {@link Builder#perform(AbstractBuild, Launcher, BuildListener)} is invoked. This is where
+ * things that are useful to users happen, like calling Ant, Make, etc.
+ *
+ *
- Recorder runs
+ *
- {@link Recorder#perform(AbstractBuild, Launcher, BuildListener)} is invoked. This is normally
+ * to record the output from the build, such as test results.
+ *
+ *
- Notifier runs
+ *
- {@link Notifier#perform(AbstractBuild, Launcher, BuildListener)} is invoked. This is normally
+ * to send out notifications, based on the results determined so far.
+ *
+ *
+ *
+ * And beyond that, the build is considered complete, and from then on {@link Build} object is there to
+ * keep the record of what happened in this build.
+ *
* @author Kohsuke Kawaguchi
*/
public abstract class Build
,B extends Build
>