hudson.model.Run#getResult ( )源码实例Demo

下面列出了hudson.model.Run#getResult ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: gitlab-plugin   文件: GitLabMessagePublisher.java
private String getNote(Run<?, ?> build, TaskListener listener) {
    String message;
    if (this.replaceSuccessNote && build.getResult() == Result.SUCCESS) {
        message = replaceMacros(build, listener, this.getSuccessNoteText());
    } else if (this.replaceAbortNote && build.getResult() == Result.ABORTED) {
        message = replaceMacros(build, listener, this.getAbortNoteText());
    } else if (this.replaceUnstableNote && build.getResult() == Result.UNSTABLE) {
        message = replaceMacros(build, listener, this.getUnstableNoteText());
    } else if (this.replaceFailureNote && build.getResult() == Result.FAILURE) {
        message = replaceMacros(build, listener, this.getFailureNoteText());
    } else {
        String icon = getResultIcon(build.getResult());
        String buildUrl = Jenkins.getInstance().getRootUrl() + build.getUrl();
        message = MessageFormat.format("{0} Jenkins Build {1}\n\nResults available at: [Jenkins [{2} #{3}]]({4})",
                                       icon, build.getResult().toString(), build.getParent().getDisplayName(), build.getNumber(), buildUrl);
    }
    return message;
}
 
@Override
public void perform(
        @Nonnull Run<?, ?> run,
        @Nonnull FilePath filePath,
        @Nonnull Launcher launcher,
        @Nonnull TaskListener taskListener) throws InterruptedException, IOException {

    Result result = run.getResult();

    boolean success  = result == Result.SUCCESS  && whenSuccess;
    boolean unstable = result == Result.UNSTABLE && whenUnstable;
    boolean failed   = result == Result.FAILURE  && whenFailed;
    boolean aborted  = result == Result.ABORTED  && whenAborted;

    boolean neededToSend = success || unstable || failed || aborted;

    if (neededToSend) {
        TelegramBotRunner.getInstance().getBot()
                .sendMessage(getMessage(), run, filePath, taskListener);
    }
}
 
@Override
protected void perform(Run<?, ?> build, TaskListener listener, GitLabClient client, MergeRequest mergeRequest) {
    try {
        if (build.getResult() == Result.SUCCESS) {
            client.acceptMergeRequest(mergeRequest, "Merge Request accepted by jenkins build success", false);
        }
    } catch (WebApplicationException | ProcessingException e) {
        listener.getLogger().printf("Failed to accept merge request for project '%s': %s%n", mergeRequest.getProjectId(), e.getMessage());
        LOGGER.log(Level.SEVERE, String.format("Failed to accept merge request for project '%s'", mergeRequest.getProjectId()), e);
    }
}
 
源代码4 项目: warnings-ng-plugin   文件: AnalysisHistory.java
private static boolean hasCorrectJobResult(final Run<?, ?> run,
        final JobResultEvaluationMode jobResultEvaluationMode) {
    if (jobResultEvaluationMode == NO_JOB_FAILURE) {
        Result result = run.getResult();

        return result != null && result.isBetterThan(Result.FAILURE);
    }
    return true;
}
 
@Override
public void onCompleted(Run<?, ?> build, @Nonnull TaskListener listener) {
    GitLabSCMHeadMetadataAction metadata = getMetadataAction(build);
    GitLabSCMPublishAction publishAction = build.getParent().getAction(GitLabSCMPublishAction.class);
    if (metadata != null && publishAction != null) {
        publishAction.publishResult(build, metadata);
    }

    if (build.getResult() == SUCCESS) {
        GitLabSCMAcceptMergeRequestAction acceptAction = build.getParent().getAction(GitLabSCMAcceptMergeRequestAction.class);
        if (acceptAction != null) {
            acceptAction.acceptMergeRequest(build, listener);
        }
    }
}
 
private int countRunStatus(Result result, boolean pullRequests) {
    Collection<Job> jobs = mbp.getAllJobs();
    int count = 0;
    for (Job j : jobs) {
        if (pullRequests && isPullRequest(j) || !pullRequests && !isPullRequest(j)) {
            j.getBuildStatusUrl();
            Run run = j.getLastBuild();
            if (run != null && run.getResult() == result) {
                count++;
            }
        }
    }
    return count;
}
 
public DecisionMaker(Run run, TaskListener listener) {
    this.run = run;
    this.taskListener = listener;

    Run previousBuild = run.getPreviousBuild();
    previousResult = previousBuild != null ? previousBuild.getResult() : Result.SUCCESS;
}
 
private boolean isNotifyBackToNormal(Result result, Webhook webhook) {

        if (!webhook.isNotifyBackToNormal() || result != Result.SUCCESS) {
            return false;
        }

        Run previousBuild = findLastCompletedBuild();
        if (previousBuild == null) {
            return false;
        } else {
            Result previousResult = previousBuild.getResult();
            return (previousResult == Result.FAILURE || previousResult == Result.UNSTABLE);
        }
    }
 
源代码9 项目: github-integration-plugin   文件: JobHelper.java
public static GHCommitState getCommitState(final Run<?, ?> run, final GHCommitState unstableAs) {
    GHCommitState state;
    Result result = run.getResult();
    if (isNull(result)) {
        LOG.error("{} result is null.", run);
        state = GHCommitState.ERROR;
    } else if (result.isBetterOrEqualTo(SUCCESS)) {
        state = GHCommitState.SUCCESS;
    } else if (result.isBetterOrEqualTo(UNSTABLE)) {
        state = unstableAs;
    } else {
        state = GHCommitState.FAILURE;
    }
    return state;
}
 
源代码10 项目: office-365-connector-plugin   文件: CardBuilder.java
public Card createCompletedCard(List<FactDefinition> factDefinitions) {
    // result might be null only for ongoing job - check documentation of Run.getCompletedResult()
    // but based on issue #133 it may happen that result for completed job is null
    Result lastResult = getCompletedResult(run);

    Run previousBuild = run.getPreviousBuild();
    Result previousResult = previousBuild != null ? previousBuild.getResult() : Result.SUCCESS;
    Run lastNotFailedBuild = run.getPreviousNotFailedBuild();

    boolean isRepeatedFailure = isRepeatedFailure(previousResult, lastNotFailedBuild);
    String summary = String.format("%s: Build %s %s", getDisplayName(), getRunName(),
            calculateSummary(lastResult, previousResult, isRepeatedFailure));
    String status = calculateStatus(lastResult, previousResult, isRepeatedFailure);

    if (lastResult == Result.FAILURE) {
        Run failingSinceBuild = getFailingSinceBuild(lastNotFailedBuild);

        if (failingSinceBuild != null && previousResult == Result.FAILURE) {
            factsBuilder.addFailingSinceBuild(failingSinceBuild.getNumber());
        }
    }
    factsBuilder.addStatus(status);
    factsBuilder.addRemarks();
    factsBuilder.addCommitters();
    factsBuilder.addDevelopers();
    factsBuilder.addUserFacts(factDefinitions);

    Section section = buildSection();

    Card card = new Card(summary, section);
    card.setThemeColor(getCardThemeColor(lastResult));
    card.setPotentialAction(potentialActionBuilder.buildActionable());

    return card;
}
 
源代码11 项目: gitlab-plugin   文件: GitLabMessagePublisher.java
@Override
protected void perform(Run<?, ?> build, TaskListener listener, GitLabClient client, MergeRequest mergeRequest) {
    try {
        if (!onlyForFailure || build.getResult() == Result.FAILURE || build.getResult() == Result.UNSTABLE) {
            client.createMergeRequestNote(mergeRequest, getNote(build, listener));
        }
    } catch (WebApplicationException | ProcessingException e) {
        listener.getLogger().printf("Failed to add comment on Merge Request for project '%s': %s%n", mergeRequest.getProjectId(), e.getMessage());
        LOGGER.log(Level.SEVERE, String.format("Failed to add comment on Merge Request for project '%s'", mergeRequest.getProjectId()), e);
    }
}
 
源代码12 项目: gitlab-plugin   文件: BuildStatusAction.java
private BuildStatus getStatus(Run<?, ?> build) {
    if (build == null) {
        return BuildStatus.NOT_FOUND;
    } else if (build.isBuilding()) {
        return BuildStatus.RUNNING;
    } else if (build.getResult() == Result.ABORTED) {
        return BuildStatus.CANCELED;
    } else if (build.getResult() == Result.SUCCESS) {
        return BuildStatus.SUCCESS;
    } else if (build.getResult() == Result.UNSTABLE) {
        return BuildStatus.UNSTABLE;
    } else {
        return BuildStatus.FAILED;
    }
}
 
/**
 * Sends notifications to GitLab on Checkout (for the "In Progress" Status).
 */
private static void sendNotifications(Run<?, ?> build, TaskListener listener) {
    GitLabSCMSource source = getSource(build);
    if (source == null) {
        return;
    }
    final GitLabSCMSourceContext sourceContext = getSourceContext(build, source);
    if (sourceContext.notificationsDisabled()) {
        return;
    }
    String url = getRootUrl(build);
    if (url.isEmpty()) {
        listener.getLogger().println(
            "Can not determine Jenkins root URL. Commit status notifications are disabled until a root URL is"
                + " configured in Jenkins global configuration.");
        return;
    }
    Result result = build.getResult();
    LOGGER.log(Level.FINE, String.format("Result: %s", result));

    CommitStatus status = new CommitStatus();
    Constants.CommitBuildState state;
    status.setTargetUrl(url);

    if (Result.SUCCESS.equals(result)) {
        status.setDescription(build.getParent().getFullName() + ": This commit looks good");
        status.setStatus("SUCCESS");
        state = Constants.CommitBuildState.SUCCESS;
    } else if (Result.UNSTABLE.equals(result)) {
        status.setDescription(
            build.getParent().getFullName() + ": This commit has test failures");
        status.setStatus("FAILED");
        state = Constants.CommitBuildState.FAILED;
    } else if (Result.FAILURE.equals(result)) {
        status.setDescription(
            build.getParent().getFullName() + ": There was a failure building this commit");
        status.setStatus("FAILED");
        state = Constants.CommitBuildState.FAILED;
    } else if (result != null) { // ABORTED, NOT_BUILT.
        status.setDescription(build.getParent().getFullName()
            + ": Something is wrong with the build of this commit");
        status.setStatus("CANCELED");
        state = Constants.CommitBuildState.CANCELED;
    } else {
        status.setDescription(build.getParent().getFullName() + ": Build started...");
        status.setStatus("RUNNING");
        state = Constants.CommitBuildState.RUNNING;
    }

    final SCMRevision revision = SCMRevisionAction.getRevision(source, build);
    String hash;
    if (revision instanceof BranchSCMRevision) {
        listener.getLogger()
            .format("[GitLab Pipeline Status] Notifying branch build status: %s %s%n",
                status.getStatus(), status.getDescription());
        hash = ((BranchSCMRevision) revision).getHash();
    } else if (revision instanceof MergeRequestSCMRevision) {
        listener.getLogger()
            .format("[GitLab Pipeline Status] Notifying merge request build status: %s %s%n",
                status.getStatus(), status.getDescription());
        hash = ((MergeRequestSCMRevision) revision).getOrigin().getHash();
    } else if (revision instanceof GitTagSCMRevision) {
        listener.getLogger()
            .format("[GitLab Pipeline Status] Notifying tag build status: %s %s%n",
                status.getStatus(), status.getDescription());
        hash = ((GitTagSCMRevision) revision).getHash();
    } else {
        return;
    }
    status.setName(getStatusName(sourceContext, build, revision));

    final JobScheduledListener jsl = ExtensionList.lookup(QueueListener.class)
        .get(JobScheduledListener.class);
    if (jsl != null) {
        // we are setting the status, so don't let the queue listener background thread change it to pending
        synchronized (jsl.resolving) {
            jsl.resolving.remove(build.getParent());
        }
    }
    try {
        GitLabApi gitLabApi = GitLabHelper.apiBuilder(source.getServerName());
        LOGGER.log(Level.FINE, String.format("Notifiying commit: %s", hash));
        gitLabApi.getCommitsApi().addCommitStatus(
            source.getProjectPath(),
            hash,
            state,
            status);
        listener.getLogger().format("[GitLab Pipeline Status] Notified%n");
    } catch (GitLabApiException e) {
        if(!e.getMessage().contains(("Cannot transition status"))) {
            LOGGER.log(Level.WARNING, String.format("Exception caught: %s",e.getMessage()));
        }
    }
}
 
public void publishResult(Run<?, ?> build, GitLabSCMHeadMetadataAction metadata) {
    Result buildResult = build.getResult();
    updateRunningContexts(build, metadata, toBuildStateFromResult(buildResult));
}
 
源代码15 项目: junit-plugin   文件: JUnitResultArchiver.java
public static TestResultAction parseAndAttach(@Nonnull JUnitTask task, PipelineTestDetails pipelineTestDetails,
                                              Run build, FilePath workspace, Launcher launcher, TaskListener listener)
        throws InterruptedException, IOException {
    listener.getLogger().println(Messages.JUnitResultArchiver_Recording());

    final String testResults = build.getEnvironment(listener).expand(task.getTestResults());

    TestResult result = parse(task, pipelineTestDetails, testResults, build, workspace, launcher, listener);

    synchronized (build) {
        // TODO can the build argument be omitted now, or is it used prior to the call to addAction?
        TestResultAction action = build.getAction(TestResultAction.class);
        boolean appending;
        if (action == null) {
            appending = false;
            action = new TestResultAction(build, result, listener);
        } else {
            appending = true;
            result.freeze(action);
            action.mergeResult(result, listener);
        }
        action.setHealthScaleFactor(task.getHealthScaleFactor()); // overwrites previous value if appending
        if (result.isEmpty()) {
            if (build.getResult() == Result.FAILURE) {
                // most likely a build failed before it gets to the test phase.
                // don't report confusing error message.
                return null;
            }
            if (task.isAllowEmptyResults()) {
                // User allow empty results
                listener.getLogger().println(Messages.JUnitResultArchiver_ResultIsEmpty());
                return null;
            }
            // most likely a configuration error in the job - e.g. false pattern to match the JUnit result files
            throw new AbortException(Messages.JUnitResultArchiver_ResultIsEmpty());
        }

        // TODO: Move into JUnitParser [BUG 3123310]
        if (task.getTestDataPublishers() != null) {
            for (TestDataPublisher tdp : task.getTestDataPublishers()) {
                Data d = tdp.contributeTestData(build, workspace, launcher, listener, result);
                if (d != null) {
                    action.addData(d);
                }
            }
        }

        if (appending) {
            build.save();
        } else {
            build.addAction(action);
        }

        return action;
    }
}
 
源代码16 项目: dingtalk-plugin   文件: DingTalkRunListener.java
@Override
public void onCompleted(Run<?, ?> build, @Nonnull TaskListener listener) {
  BuildStatusEnum statusType = null;
  boolean skipped = true;
  boolean isVerbose = globalConfig.isVerbose();
  Set<String> noticeOccasions = globalConfig.getNoticeOccasions();
  Result result = build.getResult();

  if (isVerbose) {
    Logger.line(listener, LineType.START);
  }

  if (Result.SUCCESS.equals(result)) {

    if (noticeOccasions.contains(NoticeOccasionEnum.SUCCESS.name())) {
      skipped = false;
      statusType = BuildStatusEnum.SUCCESS;
    }

  } else if (Result.FAILURE.equals(result)) {

    if (noticeOccasions.contains(NoticeOccasionEnum.FAILURE.name())) {
      skipped = false;
      statusType = BuildStatusEnum.FAILURE;
    }

  } else if (Result.ABORTED.equals(result)) {

    if (noticeOccasions.contains(NoticeOccasionEnum.ABORTED.name())) {
      skipped = false;
      statusType = BuildStatusEnum.ABORTED;
    }

  } else if (Result.UNSTABLE.equals(result)) {

    if (noticeOccasions.contains(NoticeOccasionEnum.UNSTABLE.name())) {
      skipped = false;
      statusType = BuildStatusEnum.UNSTABLE;
    }

  } else if (Result.NOT_BUILT.equals(result)) {

    if (noticeOccasions.contains(NoticeOccasionEnum.NOT_BUILT.name())) {
      skipped = false;
      statusType = BuildStatusEnum.NOT_BUILT;
    }

  } else {
    statusType = BuildStatusEnum.UNKNOWN;
    if (isVerbose) {
      Logger.debug(listener, "不匹配的构建结果类型:%s", result == null ? "null" : result);
    }
  }

  if (skipped) {
    if (isVerbose) {
      Logger.debug(listener, "构建已结束:无匹配的通知时机,无需触发钉钉");
    }
    return;
  }

  this.send(build, listener, statusType);

  if (isVerbose) {
    Logger.line(listener, LineType.END);
  }
}
 
/**
 * Get the coverage provider for the build
 *
 * @param build The current build
 * @param listener The build listener
 * @return The current coverage, if any
 */
private CoverageProvider getCoverageProvider(
        Run<?, ?> build, FilePath workspace,
        TaskListener listener,
        Set<String> includeFiles) {
    Result buildResult;
    if (build.getResult() == null) {
        buildResult = Result.SUCCESS;
    } else {
        buildResult = build.getResult();
    }
    if (!buildResult.isBetterOrEqualTo(Result.UNSTABLE)) {
        return null;
    }

    copyCoverageToJenkinsMaster(build, workspace, listener);

    CoverageProvider coverageProvider = null;
    Logger logger = new Logger(listener.getLogger());

    // First check if any coverage plugins are applied. These take precedence over other providers
    // Only one coverage plugin provider is supported per build
    if (Jenkins.getInstance().getPlugin("cobertura") != null) {
        CoberturaBuildAction coberturaBuildAction = build.getAction(CoberturaBuildAction.class);
        if (coberturaBuildAction != null) { // Choose only a single coverage provider
            logger.info(UBERALLS_TAG, "Using coverage metrics from Cobertura Jenkins Plugin");
            coverageProvider = new CoberturaPluginCoverageProvider(getCoverageReports(build), includeFiles, coberturaBuildAction);
        }
    }

    if (coverageProvider == null && Jenkins.getInstance().getPlugin("jacoco") != null) {
        JacocoBuildAction jacocoBuildAction = build.getAction(JacocoBuildAction.class);
        if (jacocoBuildAction != null) {
            logger.info(UBERALLS_TAG, "Using coverage metrics from Jacoco Jenkins Plugin");
            coverageProvider = new JacocoPluginCoverageProvider(getCoverageReports(build), includeFiles, jacocoBuildAction);
        }
    }

    if (coverageProvider == null) {
        logger.info(UBERALLS_TAG, "Trying to obtain coverage metrics by parsing coverage xml files");
        coverageProvider = new XmlCoverageProvider(getCoverageReports(build), includeFiles);
    }

    coverageProvider.computeCoverageIfNeeded();
    cleanupCoverageFilesOnJenkinsMaster(build);

    if (coverageProvider.hasCoverage()) {
        return coverageProvider;
    } else {
        logger.info(UBERALLS_TAG, "No coverage results found");
        return null;
    }
}
 
private static void createBuildCommitStatus(Run<?, ?> build, TaskListener listener) {
    SCMSource src = SCMSource.SourceByItem.findSource(build.getParent());
    SCMRevision revision = src != null ? SCMRevisionAction.getRevision(src, build) : null;
    if (revision != null) { // only notify if we have a revision to notify
        try {
            GitHub gitHub = lookUpGitHub(build.getParent());
            try {
                GHRepository repo = lookUpRepo(gitHub, build.getParent());
                if (repo != null) {
                    Result result = build.getResult();
                    String revisionToNotify = resolveHeadCommit(revision);
                    SCMHead head = revision.getHead();
                    List<AbstractGitHubNotificationStrategy> strategies = new GitHubSCMSourceContext(null, SCMHeadObserver.none())
                            .withTraits(((GitHubSCMSource) src).getTraits()).notificationStrategies();
                    for (AbstractGitHubNotificationStrategy strategy : strategies) {
                        // TODO allow strategies to combine/cooperate on a notification
                        GitHubNotificationContext notificationContext = GitHubNotificationContext.build(null, build,
                                src, head);
                        List<GitHubNotificationRequest> details = strategy.notifications(notificationContext, listener);
                        for (GitHubNotificationRequest request : details) {
                            boolean ignoreError = request.isIgnoreError();
                            try {
                                repo.createCommitStatus(revisionToNotify, request.getState(), request.getUrl(), request.getMessage(),
                                        request.getContext());
                            } catch (FileNotFoundException fnfe) {
                                if (!ignoreError) {
                                    listener.getLogger().format("%nCould not update commit status, please check if your scan " +
                                            "credentials belong to a member of the organization or a collaborator of the " +
                                            "repository and repo:status scope is selected%n%n");
                                    if (LOGGER.isLoggable(Level.FINE)) {
                                        LOGGER.log(Level.FINE, "Could not update commit status, for run "
                                                + build.getFullDisplayName()
                                                + " please check if your scan "
                                                + "credentials belong to a member of the organization or a "
                                                + "collaborator of the repository and repo:status scope is selected", fnfe);
                                    }
                                }
                            }
                        }
                    }
                    if (result != null) {
                        listener.getLogger().format("%n" + Messages.GitHubBuildStatusNotification_CommitStatusSet() + "%n%n");
                    }
                }
            } finally {
                Connector.release(gitHub);
            }
        } catch (IOException ioe) {
            listener.getLogger().format("%n"
                    + "Could not update commit status. Message: %s%n"
                    + "%n", ioe.getMessage());
            if (LOGGER.isLoggable(Level.FINE)) {
                LOGGER.log(Level.FINE, "Could not update commit status of run " + build.getFullDisplayName(), ioe);
            }
        }
    }
}
 
源代码19 项目: warnings-ng-plugin   文件: IssuesRecorder.java
/**
 * Executes the build step. Used from {@link RecordIssuesStep} to provide a {@link StageResultHandler} that has
 * Pipeline-specific behavior.
 *
 * @param run
 *         the run of the pipeline or freestyle job
 * @param workspace
 *         workspace of the build
 * @param listener
 *         the logger
 * @param statusHandler
 *         reports the status for the build or for the stage
 */
void perform(final Run<?, ?> run, final FilePath workspace, final TaskListener listener,
        final StageResultHandler statusHandler) throws InterruptedException, IOException {
    Result overallResult = run.getResult();
    if (isEnabledForFailure || overallResult == null || overallResult.isBetterOrEqualTo(Result.UNSTABLE)) {
        record(run, workspace, listener, statusHandler);
    }
    else {
        LogHandler logHandler = new LogHandler(listener, createLoggerPrefix());
        logHandler.log("Skipping execution of recorder since overall result is '%s'", overallResult);
    }
}
 
源代码20 项目: zulip-plugin   文件: ZulipNotifier.java
/**
 * Helper method to get build result from {@link Run}<br/>
 * <i>Since scripted pipeline have no post build concept, the Result variable of successful builds will<br/>
 * not be set yet. In that case we simply assume the build is a success</i>
 *
 * @param build The run to get build result from
 * @return The build result
 */
private static Result getBuildResult(Run<?, ?> build) {
    return build.getResult() != null ? build.getResult() : Result.SUCCESS;
}