if (cause instanceof Cause.UpstreamCause) { Cause.UpstreamCause upstreamCause = (Cause.UpstreamCause) cause; String upstreamJobFullName = upstreamCause.getUpstreamProject(); int upstreamJobNumber = upstreamCause.getUpstreamBuild();
/** * Gets the queue ids of all upstream projects that triggered argument queue item. * @param item the queue item to find upstream projects for * @return set of upstream project names */ public static Set<Long> getUpstreamQueueIds(Queue.Item item) { Set<Long> upstreamProjects = new HashSet<Long>(); for (Cause cause : item.getCauses()) { if (cause instanceof Cause.UpstreamCause) { Cause.UpstreamCause upstreamCause = (Cause.UpstreamCause)cause; Run<?, ?> run = upstreamCause.getUpstreamRun(); upstreamCause.getUpstreamProject(); if (run != null) { upstreamProjects.add(run.getQueueId()); } } } return Collections.unmodifiableSet(upstreamProjects); }
if (source instanceof UpstreamCause) { UpstreamCause upstreamCause = (UpstreamCause) source; return ProjectTrigger.create(upstreamCause.getUpstreamProject(), upstreamCause.getUpstreamUrl(), upstreamCause.getUpstreamBuild(), source.getShortDescription()); } else if (source instanceof RemoteCause) {
builder.addProperty("build.parentName", ExtractorUtils.sanitizeBuildName(parent.getUpstreamProject())) .addProperty("build.parentNumber", parent.getUpstreamBuild() + "");
/** * Gets the next downstream build based on the upstream build and downstream project. * * @param downstreamProject * - The downstream project * @param upstreamBuild * - The upstream build * @return - The next downstream build based on the upstream build and downstream project, or null if there is no downstream project. */ public static AbstractBuild<?, ?> getDownstreamBuild(final AbstractProject<?, ?> downstreamProject, final AbstractBuild<?, ?> upstreamBuild) { if ((downstreamProject != null) && (upstreamBuild != null)) { @SuppressWarnings("unchecked") final List<AbstractBuild<?, ?>> downstreamBuilds = (List<AbstractBuild<?, ?>>) downstreamProject.getBuilds(); for (final AbstractBuild<?, ?> innerBuild : downstreamBuilds) { for (final CauseAction action : innerBuild.getActions(CauseAction.class)) { for (final Cause cause : action.getCauses()) { if (cause instanceof UpstreamCause) { final UpstreamCause upstreamCause = (UpstreamCause) cause; if (upstreamCause.getUpstreamProject().equals(upstreamBuild.getProject().getFullName()) && (upstreamCause.getUpstreamBuild() == upstreamBuild.getNumber())) { return innerBuild; } } } } } } return null; }
@Override public void addRecipients(final ExtendedEmailPublisherContext context, EnvVars env, Set<InternetAddress> to, Set<InternetAddress> cc, Set<InternetAddress> bcc) { final class Debug implements RecipientProviderUtilities.IDebug { private final ExtendedEmailPublisherDescriptor descriptor = Jenkins.getActiveInstance().getDescriptorByType(ExtendedEmailPublisherDescriptor.class); private final PrintStream logger = context.getListener().getLogger(); public void send(final String format, final Object... args) { descriptor.debug(logger, format, args); } } final Debug debug = new Debug(); // looking for Upstream build. Run<?, ?> cur = context.getRun(); Cause.UpstreamCause upc = cur.getCause(Cause.UpstreamCause.class); while (upc != null) { // UpstreamCause.getUpStreamProject() returns the full name, so use getItemByFullName Job<?, ?> p = (Job<?, ?>) Jenkins.getActiveInstance().getItemByFullName(upc.getUpstreamProject()); if (p == null) { context.getListener().getLogger().print("There is a break in the project linkage, could not retrieve upstream project information"); break; } cur = p.getBuildByNumber(upc.getUpstreamBuild()); if (cur == null) { context.getListener().getLogger().print("There is a break in the build linkage, could not retrieve upstream build information"); break; } upc = cur.getCause(Cause.UpstreamCause.class); } addUserTriggeringTheBuild(cur, to, cc, bcc, env, context, debug); }
/** * Helper method for {@link #readResolve()}, will try to find the upstream {@link MatrixBuild}. Since the run is * de-serialized badly (not referenced in the correct hierarchy) this could be a bit tricky. * * @param run the MatrixRun to search. * @return the correct instance if possible. */ private MatrixBuild findUpStream(MatrixRun run) { Cause.UpstreamCause cause = run.getCause(Cause.UpstreamCause.class); if (cause != null) { String project = cause.getUpstreamProject(); //Yes the folders plugin could cause problems here, // but stapler can't help me if I use the URL which would be preferred. //TODO what to do when the job is renamed? TopLevelItem item; item = Jenkins.getInstance().getItem(project); logger.log(Level.FINE, "Project item for {0} is {1}", new Object[]{project, item}); if (item != null && item instanceof MatrixProject) { logger.log(Level.FINEST, "It is a matrix project; searching for build {0}", cause.getUpstreamBuild()); //Find the build return ((MatrixProject)item).getBuildByNumber(cause.getUpstreamBuild()); } } return null; } }
public static boolean isQueued(AbstractProject project, AbstractBuild firstBuild) { if (!project.isInQueue()) { return false; } else if (firstBuild == null) { return true; } List<Cause.UpstreamCause> causes = Util.filter(project.getQueueItem().getCauses(), Cause.UpstreamCause.class); @SuppressWarnings("unchecked") List<AbstractProject<?,?>> upstreamProjects = project.getUpstreamProjects(); for (AbstractProject<?, ?> upstreamProject : upstreamProjects) { AbstractBuild upstreamBuild = BuildUtil.match(upstreamProject.getBuilds(), firstBuild); if (upstreamBuild != null) { for (Cause.UpstreamCause upstreamCause : causes) { if (upstreamBuild.getNumber() == upstreamCause.getUpstreamBuild() && upstreamProject.getRelativeNameFrom(JenkinsUtil.getInstance()).equals( upstreamCause.getUpstreamProject())) { return true; } } } } return false; }
@Override public void addRecipients(final ExtendedEmailPublisherContext context, EnvVars env, Set<InternetAddress> to, Set<InternetAddress> cc, Set<InternetAddress> bcc) { final class Debug implements RecipientProviderUtilities.IDebug { private final ExtendedEmailPublisherDescriptor descriptor = Jenkins.getActiveInstance().getDescriptorByType(ExtendedEmailPublisherDescriptor.class); private final PrintStream logger = context.getListener().getLogger(); public void send(final String format, final Object... args) { descriptor.debug(logger, format, args); } } final Debug debug = new Debug(); debug.send("Sending email to upstream committer(s)."); Run<?, ?> cur; Cause.UpstreamCause upc = context.getRun().getCause(Cause.UpstreamCause.class); while (upc != null) { Job<?, ?> p = (Job<?, ?>) Jenkins.getActiveInstance().getItemByFullName(upc.getUpstreamProject()); if(p == null) { context.getListener().getLogger().print("There is a break in the project linkage, could not retrieve upstream project information"); break; } cur = p.getBuildByNumber(upc.getUpstreamBuild()); upc = cur.getCause(Cause.UpstreamCause.class); addUpstreamCommittersTriggeringBuild(cur, to, cc, bcc, env, context, debug); } }
public static ArrayListMultimap<String, String> getPropertiesMap(BuildInfo buildInfo, Run build, StepContext context) throws IOException, InterruptedException { ArrayListMultimap<String, String> properties = ArrayListMultimap.create(); if (buildInfo.getName() != null) { properties.put("build.name", buildInfo.getName()); } else { properties.put("build.name", BuildUniqueIdentifierHelper.getBuildName(build)); } if (buildInfo.getNumber() != null) { properties.put("build.number", buildInfo.getNumber()); } else { properties.put("build.number", BuildUniqueIdentifierHelper.getBuildNumber(build)); } properties.put("build.timestamp", build.getTimestamp().getTime().getTime() + ""); Cause.UpstreamCause parent = ActionableHelper.getUpstreamCause(build); if (parent != null) { properties.put("build.parentName", ExtractorUtils.sanitizeBuildName(parent.getUpstreamProject())); properties.put("build.parentNumber", parent.getUpstreamBuild() + ""); } EnvVars env = context.get(EnvVars.class); String revision = ExtractorUtils.getVcsRevision(env); if (StringUtils.isNotBlank(revision)) { properties.put(BuildInfoFields.VCS_REVISION, revision); } return properties; }
private AbstractBuild getBuildByUpstreamCause(List<Cause> causes,BuildListener listener ){ for(Cause cause: (List<Cause>) causes){ if(cause instanceof Cause.UpstreamCause) { TopLevelItem upstreamProject = Hudson.getInstance().getItemByFullName(((Cause.UpstreamCause)cause).getUpstreamProject(), TopLevelItem.class); if(upstreamProject instanceof AbstractProject){ int buildId = ((Cause.UpstreamCause)cause).getUpstreamBuild(); Run run = ((AbstractProject) upstreamProject).getBuildByNumber(buildId); System.out.println(); AbstractBuild upstreamRun = getBuildByUpstreamCause(run.getCauses(),listener); if(upstreamRun == null) { return (AbstractBuild) run; }else{ return upstreamRun; } } } } return null; }
@CheckForNull public static AbstractBuild getUpstreamBuild(AbstractBuild build) { List<CauseAction> actions = build.getActions(CauseAction.class); for (CauseAction action : actions) { List<Cause.UpstreamCause> causes = Util.filter(action.getCauses(), Cause.UpstreamCause.class); if (!causes.isEmpty()) { Cause.UpstreamCause upstreamCause = causes.get(0); AbstractProject upstreamProject = JenkinsUtil.getInstance().getItemByFullName( upstreamCause.getUpstreamProject(), AbstractProject.class); //Due to https://issues.jenkins-ci.org/browse/JENKINS-14030 when a project has been renamed triggers // are not updated correctly if (upstreamProject == null) { return null; } return upstreamProject.getBuildByNumber(upstreamCause.getUpstreamBuild()); } } return null; }
private static AbstractBuild<?, ?> getUpstreamBuild(AbstractBuild<?, ?> build) { AbstractBuild<?, ?> upstreamBuild; Cause.UpstreamCause cause = ActionableHelper.getUpstreamCause(build); if (cause == null) { return null; } AbstractProject<?, ?> upstreamProject = getProject(cause.getUpstreamProject()); if (upstreamProject == null) { debuggingLogger.fine("No project found answering for the name: " + cause.getUpstreamProject()); return null; } upstreamBuild = upstreamProject.getBuildByNumber(cause.getUpstreamBuild()); if (upstreamBuild == null) { debuggingLogger.fine( "No build with name: " + upstreamProject.getName() + " and number: " + cause.getUpstreamBuild()); } return upstreamBuild; }
private ArrayListMultimap<String, String> getbuildPropertiesMap() { ArrayListMultimap<String, String> properties = ArrayListMultimap.create(); String buildName = BuildUniqueIdentifierHelper.getBuildNameConsiderOverride(configurator, build); properties.put("build.name", buildName); properties.put("build.number", BuildUniqueIdentifierHelper.getBuildNumber(build)); properties.put("build.timestamp", build.getTimestamp().getTime().getTime() + ""); Cause.UpstreamCause parent = ActionableHelper.getUpstreamCause(build); if (parent != null) { properties.put("build.parentName", ExtractorUtils.sanitizeBuildName(parent.getUpstreamProject())); properties.put("build.parentNumber", parent.getUpstreamBuild() + ""); } String revision = ExtractorUtils.getVcsRevision(env); if (StringUtils.isNotBlank(revision)) { properties.put(BuildInfoFields.VCS_REVISION, revision); } properties.putAll(PropertyUtils.getDeploymentPropertiesMap(configurator.getDeploymentProperties(), env)); return properties; }
/** * Finds the name of the matrix project that this action probably belongs to. * @return the name of the project or null if runs are bad. */ public synchronized String findUpStreamName() { if (runs != null) { for (MatrixRun run : runs) { Cause.UpstreamCause cause = run.getCause(Cause.UpstreamCause.class); if (cause != null) { return cause.getUpstreamProject(); } } } return null; }
public CauseDTO(Cause cause) { this.shortDescription = cause.getShortDescription(); if (cause instanceof Cause.UserIdCause) { Cause.UserIdCause userIdCause = (Cause.UserIdCause) cause; this.userId = userIdCause.getUserId(); this.userName = userIdCause.getUserName(); } else if (cause instanceof Cause.RemoteCause) { Cause.RemoteCause remoteCause = (Cause.RemoteCause) cause; this.remoteAddr = remoteCause.getAddr(); this.remoteNote = remoteCause.getNote(); } else if (cause instanceof Cause.UpstreamCause) { Cause.UpstreamCause upstreamCause = (Cause.UpstreamCause) cause; this.upstreamProject = upstreamCause.getUpstreamProject(); this.upstreamUrl = upstreamCause.getUpstreamUrl(); } }
public CauseDTO(Cause cause) { this.shortDescription = cause.getShortDescription(); if (cause instanceof Cause.UserIdCause) { Cause.UserIdCause userIdCause = (Cause.UserIdCause) cause; this.userId = userIdCause.getUserId(); this.userName = userIdCause.getUserName(); } else if (cause instanceof Cause.RemoteCause) { Cause.RemoteCause remoteCause = (Cause.RemoteCause) cause; this.remoteAddr = remoteCause.getAddr(); this.remoteNote = remoteCause.getNote(); } else if (cause instanceof Cause.UpstreamCause) { Cause.UpstreamCause upstreamCause = (Cause.UpstreamCause) cause; this.upstreamProject = upstreamCause.getUpstreamProject(); this.upstreamUrl = upstreamCause.getUpstreamUrl(); } }
/** * Constructor for Cause.UpstreamCause. * @param upstreamCause The Cause to copy. */ public UpstreamCause(Cause.UpstreamCause upstreamCause) { if (upstreamCause == null) { this.project = ""; this.build = 0; } else { this.project = upstreamCause.getUpstreamProject(); this.build = upstreamCause.getUpstreamBuild(); } }
private static String getUpstreamCauseString(Cause.UpstreamCause upstreamCause) { AbstractProject upstreamProject = JenkinsUtil.getInstance().getItem(upstreamCause.getUpstreamProject(), JenkinsUtil.getInstance(), AbstractProject.class); String causeString = "upstream project"; if (upstreamProject != null) { causeString += " " + upstreamProject.getDisplayName(); AbstractBuild upstreamBuild = upstreamProject.getBuildByNumber(upstreamCause.getUpstreamBuild()); if (upstreamBuild != null) { causeString += " build " + upstreamBuild.getDisplayName(); } } return causeString; }
@Override public void onInitialize(WorkflowRun run) { super.onInitialize(run); for (Cause cause: run.getCauses()) { if (cause instanceof Cause.UpstreamCause) { Cause.UpstreamCause upstreamCause = (Cause.UpstreamCause) cause; String upstreamJobName = upstreamCause.getUpstreamProject(); int upstreamBuildNumber = upstreamCause.getUpstreamBuild(); globalPipelineMavenConfig.getDao().recordBuildUpstreamCause(upstreamJobName, upstreamBuildNumber, run.getParent().getFullName(), run.getNumber()); } } }