Class AbstractBuild<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>
- java.lang.Object
-
- hudson.model.AbstractModelObject
-
- hudson.model.Actionable
-
- hudson.model.Run<P,R>
-
- hudson.model.AbstractBuild<P,R>
-
- All Implemented Interfaces:
ExtensionPoint,DescriptorByNameOwner,ModelObject,PersistenceRoot,Queue.Executable,Saveable,SearchableModelObject,SearchItem,AccessControlled,Comparable<R>,Runnable,LazyBuildMixIn.LazyLoadingRun<P,R>,ModelObjectWithContextMenu,RunWithSCM<P,R>,OnMaster,org.kohsuke.stapler.StaplerProxy
- Direct Known Subclasses:
Build
public abstract class AbstractBuild<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>> extends Run<P,R> implements Queue.Executable, LazyBuildMixIn.LazyLoadingRun<P,R>, RunWithSCM<P,R>
Base implementation ofRuns that build software. For now this is primarily the common part ofBuildand MavenBuild.- Author:
- Kohsuke Kawaguchi
- See Also:
AbstractProject
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classAbstractBuild.AbstractBuildExecutionclassAbstractBuild.AbstractRunnerDeprecated.as of 1.467 Please useRun.RunExecutionstatic classAbstractBuild.DependencyChangeRepresents a change in the dependency.-
Nested classes/interfaces inherited from class hudson.model.Run
Run.Artifact, Run.ArtifactList, Run.KeepLogBuildBadge, Run.RedirectUp, Run.RunExecution, Run.Runner, Run.RunnerAbortedException, Run.StatusSummarizer, Run.Summary
-
Nested classes/interfaces inherited from interface hudson.ExtensionPoint
ExtensionPoint.LegacyInstancesAreScopedToHudson
-
Nested classes/interfaces inherited from interface jenkins.model.ModelObjectWithContextMenu
ModelObjectWithContextMenu.ContextMenu, ModelObjectWithContextMenu.ContextMenuVisibility, ModelObjectWithContextMenu.MenuItem, ModelObjectWithContextMenu.MenuItemType
-
-
Field Summary
Fields Modifier and Type Field Description protected List<Environment>buildEnvironmentsDuring the build this field remembersBuildWrapper.Environments created byBuildWrapper.-
Fields inherited from class hudson.model.Run
ARTIFACTS, charset, DELETE, description, duration, FEED_ADAPTER, FEED_ADAPTER_LATEST, LIST_CUTOFF, nextBuild, number, ORDER_BY_DATE, PERMISSIONS, previousBuild, project, QUEUE_ID_UNKNOWN, result, SKIP_PERMISSION_CHECK, timestamp, UPDATE, XSTREAM, XSTREAM2
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractBuild(P job)protectedAbstractBuild(P project, File buildDir)protectedAbstractBuild(P job, Calendar timestamp)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description voidaddAction(Action a)Adds a new action.Set<User>calculateCulprits()Method used for actually calculating the culprits from scratch.protected BuildReference<R>createReference()Called byRunMapto obtain a reference to this run.org.kohsuke.stapler.HttpResponsedoStop()Stops this build if it's still going.voiddoStop(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse rsp)Deprecated.as of 1.489 UsedoStop()protected voiddropLinks()Called byRunMapto drop bi-directional links in preparation for deleting a build.Calendardue()ActiongetAggregatedTestResultAction()Deprecated.UseActionable.getAction(Class)onAggregatedTestResultAction.VariableResolver<String>getBuildVariableResolver()CreatesVariableResolverbacked bygetBuildVariables().Map<String,String>getBuildVariables()Provides additional variables and their values toBuilders.NodegetBuiltOn()Returns aSlaveon which this build was done.StringgetBuiltOnStr()Returns the name of the agent it was built on; null or "" if built by the built-in node.ChangeLogSet<? extends ChangeLogSet.Entry>getChangeSet()Gets the changes incorporated into this build.List<ChangeLogSet<? extends ChangeLogSet.Entry>>getChangeSets()Gets allChangeLogSets currently associated with this item.Set<String>getCulpritIds()Gets the ids for allUsers included inRunWithSCM.getChangeSets()for this item.Set<User>getCulprits()List of users who committed a change since the last non-broken build till now.Map<AbstractProject,AbstractBuild.DependencyChange>getDependencyChanges(AbstractBuild from)Gets the changes in the dependency between the given build and this build.Map<AbstractProject,Fingerprint.RangeSet>getDownstreamBuilds()Gets the downstream builds of this build, which are the builds of the downstream projects that use artifacts of this build.Iterable<AbstractBuild<?,?>>getDownstreamBuilds(AbstractProject<?,?> that)Works likegetDownstreamRelationship(AbstractProject)but returns the actual build objects, in ascending order.Fingerprint.RangeSetgetDownstreamRelationship(AbstractProject that)Gets the dependency relationship from this build (as the source) and that project (as the sink.)EnvVarsgetEnvironment(TaskListener log)Returns the map that contains environmental variables to be used for launching processes for this build.EnvironmentListgetEnvironments()During the build, expose the environments contributed byBuildWrappers and others.StringgetHudsonVersion()Gets the version of Hudson that was used to build this job.FilePathgetModuleRoot()Returns the root directory of the checked-out module.FilePath[]getModuleRoots()Returns the root directories of all checked-out modules.RgetNextBuild()Queue.ExecutablegetParentExecutable()An umbrella executable (such as aRun) of which this is one part.List<Action>getPersistentActions()RgetPreviousBuild()PgetProject()AbstractBuild<?,?>getRootBuild()Gets the nearest ancestorAbstractBuildthat belongs to the root project of getProject() that dominates/governs/encompasses this build.LazyBuildMixIn.RunMixIn<P,R>getRunMixIn()Set<String>getSensitiveBuildVariables()Builds up a set of variable names that contain sensitive values that should not be exposed.ActiongetTestResultAction()Deprecated.UseActionable.getAction(Class)onAbstractTestResultAction.Map<AbstractProject,Integer>getTransitiveUpstreamBuilds()Works likegetUpstreamBuilds()but also includes all the transitive dependencies as well.Map<AbstractProject,Integer>getUpstreamBuilds()Gets the upstream builds of this build, which are the builds of the upstream projects whose artifacts feed into this build.intgetUpstreamRelationship(AbstractProject that)Gets the dependency relationship from this build (as the sink) and that project (as the source.)AbstractBuild<?,?>getUpstreamRelationshipBuild(AbstractProject<?,?> that)Works likegetUpstreamRelationship(AbstractProject)but returns the actual build object.StringgetUpUrl()Deprecated.navigation through a hierarchy should be done through breadcrumbs, do not add a link using this methodStringgetWhyKeepLog()IfRun.isKeepLog()returns true, returns a short, human-readable sentence that explains why it's being kept.FilePathgetWorkspace()Gets the directory where this build is being built.booleanhasChangeSetComputed()Returns true if the changelog is already computed.abstract voidrun()Invoked byExecutorto performs a build.protected voidsetBuiltOnStr(String builtOn)Allows subtypes to set the value ofbuiltOn.protected voidsetWorkspace(FilePath ws)Normally, a workspace is assigned byRun.RunExecution, but this lets you set the workspace in caseAbstractBuildis created without a build.booleanshouldCalculateCulprits()Determines whether culprits should be recalcuated or the existingRunWithSCM.getCulpritIds()should be used instead.-
Methods inherited from class hudson.model.Run
_this, canToggleLogKeep, compareTo, delete, deleteArtifacts, doArtifact, doBuildNumber, doBuildStatus, doBuildTimestamp, doConfigSubmit, doConsoleText, doDoDelete, doProgressiveLog, doSubmitDescription, doToggleLogKeep, execute, fromExternalizableId, getAbsoluteUrl, getACL, getApi, getArtifactManager, getArtifacts, getArtifactsDir, getArtifactsUpTo, getBadgeActions, getBuildFingerprints, getBuildsOverThreshold, getBuildStatusIconClassName, getBuildStatusSummary, getBuildStatusUrl, getCause, getCauses, getCharacteristicEnvVars, getCharset, getDescription, getDisplayName, getDuration, getDurationString, getDynamic, getEnvironment, getEnvVars, getEstimatedDuration, getExecutor, getExternalizableId, getFullDisplayName, getHasArtifacts, getIconColor, getId, getLog, getLog, getLogFile, getLogInputStream, getLogReader, getLogText, getNumber, getOneOffExecutor, getParent, getPreviousBuildInProgress, getPreviousBuildsOverThreshold, getPreviousBuiltBuild, getPreviousCompletedBuild, getPreviousFailedBuild, getPreviousNotFailedBuild, getPreviousSuccessfulBuild, getQueueId, getResult, getRootDir, getSearchUrl, getStartTimeInMillis, getTarget, getTime, getTimeInMillis, getTimestamp, getTimestampString, getTimestampString2, getTransientActions, getTruncatedDescription, getUrl, hasCustomDisplayName, hasntStartedYet, isBuilding, isInProgress, isKeepLog, isLogUpdated, keepLog, keepLog, makeSearchIndex, onEndBuilding, onLoad, onStartBuilding, pickArtifactManager, reload, run, save, setDescription, setDisplayName, setQueueId, setResult, submit, toString, updateSymlinks, writeLogTo, writeReplace, writeWholeLogTo
-
Methods inherited from class hudson.model.Actionable
addOrReplaceAction, doContextMenu, getAction, getAction, getActions, getActions, getAllActions, removeAction, removeActions, replaceAction, replaceActions
-
Methods inherited from class hudson.model.AbstractModelObject
getSearch, getSearchIndex, getSearchName, requirePOST, sendError, sendError, sendError, sendError, sendError
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface hudson.security.AccessControlled
checkAnyPermission, checkPermission, hasAnyPermission, hasPermission, hasPermission, hasPermission2
-
Methods inherited from interface hudson.model.DescriptorByNameOwner
getDescriptorByName
-
Methods inherited from interface hudson.model.Queue.Executable
getEstimatedDuration, getParent, toString
-
Methods inherited from interface jenkins.scm.RunWithSCM
hasParticipant
-
-
-
-
Field Detail
-
buildEnvironments
protected transient List<Environment> buildEnvironments
During the build this field remembersBuildWrapper.Environments created byBuildWrapper. This design is bit ugly but forced due to compatibility.
-
-
Constructor Detail
-
AbstractBuild
protected AbstractBuild(P job) throws IOException
- Throws:
IOException
-
AbstractBuild
protected AbstractBuild(P project, File buildDir) throws IOException
- Throws:
IOException
-
-
Method Detail
-
getProject
public final P getProject()
-
getRunMixIn
public final LazyBuildMixIn.RunMixIn<P,R> getRunMixIn()
- Specified by:
getRunMixInin interfaceLazyBuildMixIn.LazyLoadingRun<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>
-
createReference
@NonNull protected final BuildReference<R> createReference()
Description copied from class:RunCalled byRunMapto obtain a reference to this run.- Overrides:
createReferencein classRun<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- Returns:
- Reference to the build. Never null
- See Also:
LazyBuildMixIn.RunMixIn.createReference()
-
dropLinks
protected final void dropLinks()
Description copied from class:RunCalled byRunMapto drop bi-directional links in preparation for deleting a build.- Overrides:
dropLinksin classRun<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- See Also:
LazyBuildMixIn.RunMixIn.dropLinks()
-
getPreviousBuild
public R getPreviousBuild()
- Overrides:
getPreviousBuildin classRun<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- See Also:
LazyBuildMixIn.RunMixIn.getPreviousBuild()
-
getNextBuild
public R getNextBuild()
- Overrides:
getNextBuildin classRun<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- See Also:
LazyBuildMixIn.RunMixIn.getNextBuild()
-
getBuiltOn
@CheckForNull public Node getBuiltOn()
Returns aSlaveon which this build was done.- Returns:
- null, for example if the agent that this build run no longer exists.
-
getBuiltOnStr
@Exported(name="builtOn") public String getBuiltOnStr()
Returns the name of the agent it was built on; null or "" if built by the built-in node. (null happens when we read old record that didn't have this information.)
-
setBuiltOnStr
protected void setBuiltOnStr(String builtOn)
Allows subtypes to set the value ofbuiltOn. This is used for those implementations where anAbstractBuildis made 'built' without actually running itsrun()method.- Since:
- 1.429
-
getRootBuild
public AbstractBuild<?,?> getRootBuild()
Gets the nearest ancestorAbstractBuildthat belongs to the root project of getProject() that dominates/governs/encompasses this build.Some projects (such as matrix projects, Maven projects, or promotion processes) form a tree of jobs, and still in some of them, builds of child projects are related/tied to that of the parent project. In such a case, this method returns the governing build.
- Returns:
- never null. In the worst case the build dominates itself.
- Since:
- 1.421
- See Also:
AbstractProject.getRootProject()
-
getParentExecutable
public Queue.Executable getParentExecutable()
Description copied from interface:Queue.ExecutableAn umbrella executable (such as aRun) of which this is one part. Some invariants:getParent().getOwnerTask() == getParent() || getParentExecutable().getParent() == getParent().getOwnerTask()getParent().getOwnerExecutable() == null || getParentExecutable() == getParent().getOwnerExecutable()
- Specified by:
getParentExecutablein interfaceQueue.Executable- Returns:
- a distinct executable (never
this, unlike the default ofSubTask.getOwnerTask()!); or null if this executable was already at top level - See Also:
SubTask.getOwnerExecutable()
-
getUpUrl
@Deprecated(since="2.364") public String getUpUrl()
Deprecated.navigation through a hierarchy should be done through breadcrumbs, do not add a link using this methodUsed to render the side panel "Back to project" link.In a rare situation where a build can be reached from multiple paths, returning different URLs from this method based on situations might be desirable.
If you override this method, you'll most likely also want to override
Run.getDisplayName().
-
getWorkspace
@CheckForNull public final FilePath getWorkspace()
Gets the directory where this build is being built.Note to implementors: to control where the workspace is created, override
AbstractBuild.AbstractBuildExecution.decideWorkspace(Node,WorkspaceList).- Returns:
- null if the workspace is on an agent that's not connected. Note that once the build is completed, the workspace may be used to build something else, so the value returned from this method may no longer show a workspace as it was used for this build.
- Since:
- 1.319
-
setWorkspace
protected void setWorkspace(@NonNull FilePath ws)Normally, a workspace is assigned byRun.RunExecution, but this lets you set the workspace in caseAbstractBuildis created without a build.
-
getModuleRoot
public final FilePath getModuleRoot()
Returns the root directory of the checked-out module.This is usually where
pom.xml,build.xmland so on exists.
-
getModuleRoots
public FilePath[] getModuleRoots()
Returns the root directories of all checked-out modules.Some SCMs support checking out multiple modules into the same workspace. In these cases, the returned array will have a length greater than one.
- Returns:
- The roots of all modules checked out from the SCM.
-
getCulpritIds
@CheckForNull public Set<String> getCulpritIds()
Description copied from interface:RunWithSCMGets the ids for allUsers included inRunWithSCM.getChangeSets()for this item.- Specified by:
getCulpritIdsin interfaceRunWithSCM<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- Returns:
- A set of user IDs, or null if this was the first time the method was called or the build is still running
for a
RunWithSCMinstance with no culprits.
-
getCulprits
@Exported @NonNull public Set<User> getCulprits()
Description copied from interface:RunWithSCMList of users who committed a change since the last non-broken build till now.This list at least always include people who made changes in this build, but if the previous build was a failure it also includes the culprit list from there.
Missing
Users will be created on-demand.- Specified by:
getCulpritsin interfaceRunWithSCM<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- Returns:
- can be empty but never null.
-
shouldCalculateCulprits
public boolean shouldCalculateCulprits()
Description copied from interface:RunWithSCMDetermines whether culprits should be recalcuated or the existingRunWithSCM.getCulpritIds()should be used instead.- Specified by:
shouldCalculateCulpritsin interfaceRunWithSCM<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- Returns:
- True if culprits should be recalcuated, false otherwise.
-
calculateCulprits
@NonNull public Set<User> calculateCulprits()
Description copied from interface:RunWithSCMMethod used for actually calculating the culprits from scratch. Called byRunWithSCM.getCulprits()and overrides ofRunWithSCM.getCulprits(). Does not persist culprits information.- Specified by:
calculateCulpritsin interfaceRunWithSCM<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- Returns:
- a non-null
SetofUsers associated with this item.
-
getHudsonVersion
public String getHudsonVersion()
Gets the version of Hudson that was used to build this job.- Since:
- 1.246
-
getChangeSet
@Exported @NonNull public ChangeLogSet<? extends ChangeLogSet.Entry> getChangeSet()
Gets the changes incorporated into this build.- Returns:
- never null.
-
getChangeSets
@NonNull public List<ChangeLogSet<? extends ChangeLogSet.Entry>> getChangeSets()
Description copied from interface:RunWithSCMGets allChangeLogSets currently associated with this item.- Specified by:
getChangeSetsin interfaceRunWithSCM<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- Returns:
- A possibly empty list of
ChangeLogSets.
-
hasChangeSetComputed
public boolean hasChangeSetComputed()
Returns true if the changelog is already computed.
-
getEnvironment
@NonNull public EnvVars getEnvironment(@NonNull TaskListener log) throws IOException, InterruptedException
Description copied from class:RunReturns the map that contains environmental variables to be used for launching processes for this build.BuildSteps that invoke external processes should use this. This allowsBuildWrappers and other project configurations (such as JDK selection) to take effect.Unlike earlier
Run.getEnvVars(), this map contains the whole environment, not just the overrides, so one can introspect values to change its behavior.- Overrides:
getEnvironmentin classRun<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>- Returns:
- the map with the environmental variables.
- Throws:
IOExceptionInterruptedException
-
getEnvironments
public EnvironmentList getEnvironments()
During the build, expose the environments contributed byBuildWrappers and others.Since 1.444, executor thread that's doing the build can access mutable underlying list, which allows the caller to add/remove environments. The recommended way of adding environment is through
BuildWrapper, but this might be handy for build steps who wants to expose additional environment variables to the rest of the build.- Returns:
- can be empty list, but never null. Immutable.
- Since:
- 1.437
-
due
public Calendar due()
-
addAction
public void addAction(@NonNull Action a)Adds a new action. Note: calls toActionable.getAllActions()that happen before calls to this method may not see the update. Note: this method will always modify the actions ARunAction2is handled specially. The action may have asummary.jellyview containing a<t:summary>or other<tr>.- Overrides:
addActionin classRun<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>
-
getSensitiveBuildVariables
public Set<String> getSensitiveBuildVariables()
Builds up a set of variable names that contain sensitive values that should not be exposed. The expectation is that this set is populated with keys returned bygetBuildVariables()that should have their values masked for display purposes.- Since:
- 1.378
-
getBuildVariables
public Map<String,String> getBuildVariables()
Provides additional variables and their values toBuilders.This mechanism is used by
MatrixConfigurationto pass the configuration values to the current build. It is up toBuilders to decide whether they want to recognize the values or how to use them.This also includes build parameters if a build is parameterized.
- Returns:
- The returned map is mutable so that subtypes can put more values.
-
getBuildVariableResolver
public final VariableResolver<String> getBuildVariableResolver()
CreatesVariableResolverbacked bygetBuildVariables().
-
getTestResultAction
@Deprecated public Action getTestResultAction()
Deprecated.UseActionable.getAction(Class)onAbstractTestResultAction.
-
getAggregatedTestResultAction
@Deprecated public Action getAggregatedTestResultAction()
Deprecated.UseActionable.getAction(Class)onAggregatedTestResultAction.
-
run
public abstract void run()
Invoked byExecutorto performs a build.- Specified by:
runin interfaceQueue.Executable- Specified by:
runin interfaceRunnable
-
getWhyKeepLog
public String getWhyKeepLog()
Description copied from class:RunIfRun.isKeepLog()returns true, returns a short, human-readable sentence that explains why it's being kept.- Overrides:
getWhyKeepLogin classRun<P extends AbstractProject<P,R>,R extends AbstractBuild<P,R>>
-
getDownstreamRelationship
public Fingerprint.RangeSet getDownstreamRelationship(AbstractProject that)
Gets the dependency relationship from this build (as the source) and that project (as the sink.)- Returns:
- range of build numbers that represent which downstream builds are using this build.
The range will be empty if no build of that project matches this (or there is no
Fingerprinter.FingerprintAction), but it'll never be null.
-
getDownstreamBuilds
public Iterable<AbstractBuild<?,?>> getDownstreamBuilds(AbstractProject<?,?> that)
Works likegetDownstreamRelationship(AbstractProject)but returns the actual build objects, in ascending order.- Since:
- 1.150
-
getUpstreamRelationship
public int getUpstreamRelationship(AbstractProject that)
Gets the dependency relationship from this build (as the sink) and that project (as the source.)- Returns:
- Build number of the upstream build that feed into this build,
or -1 if no record is available (for example if there is no
Fingerprinter.FingerprintAction, even if there is anCause.UpstreamCause).
-
getUpstreamRelationshipBuild
public AbstractBuild<?,?> getUpstreamRelationshipBuild(AbstractProject<?,?> that)
Works likegetUpstreamRelationship(AbstractProject)but returns the actual build object.- Returns:
- null if no such upstream build was found, or it was found but the build record is already lost.
-
getDownstreamBuilds
public Map<AbstractProject,Fingerprint.RangeSet> getDownstreamBuilds()
Gets the downstream builds of this build, which are the builds of the downstream projects that use artifacts of this build.- Returns:
- For each project with fingerprinting enabled, returns the range
of builds (which can be empty if no build uses the artifact from this build or downstream is not
AbstractProject.isFingerprintConfigured().)
-
getUpstreamBuilds
public Map<AbstractProject,Integer> getUpstreamBuilds()
Gets the upstream builds of this build, which are the builds of the upstream projects whose artifacts feed into this build.- Returns:
- empty if there is no
Fingerprinter.FingerprintAction(even if there is anCause.UpstreamCause) - See Also:
getTransitiveUpstreamBuilds()
-
getTransitiveUpstreamBuilds
public Map<AbstractProject,Integer> getTransitiveUpstreamBuilds()
Works likegetUpstreamBuilds()but also includes all the transitive dependencies as well.
-
getDependencyChanges
public Map<AbstractProject,AbstractBuild.DependencyChange> getDependencyChanges(AbstractBuild from)
Gets the changes in the dependency between the given build and this build.- Returns:
- empty if there is no
Fingerprinter.FingerprintAction
-
doStop
@Deprecated public void doStop(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse rsp) throws IOException, javax.servlet.ServletException
Deprecated.as of 1.489 UsedoStop()- Throws:
IOExceptionjavax.servlet.ServletException
-
doStop
public org.kohsuke.stapler.HttpResponse doStop() throws IOException, javax.servlet.ServletExceptionStops this build if it's still going. If we use this/executor/stop URL, it causes 404 if the build is already killed, asRun.getExecutor()returns null.- Throws:
IOExceptionjavax.servlet.ServletException- Since:
- 1.489
-
-