public void notifyBuildFailedToStart(@NotNull SRunningBuild sRunningBuild, @NotNull Set<SUser> users) { sendNotification(sRunningBuild.getFullName(), sRunningBuild.getBuildNumber(), "failed to start", "danger", users, sRunningBuild); }
public void handle(SRunningBuild build, SBuildFeatureDescriptor feature, BuildStatus buildStatus) throws IOException { LOGGER.log(Level.INFO, "Handling build status - Build Status: {0}, Branch: {1}, isSuccessful: {2}", new Object[]{buildStatus, build.getBranch() == null ? null : build.getBranch().getName(), build.getBuildStatus().isSuccessful()}); Branch branch = build.getBranch(); if (branch != null) { VcsPropertiesHelper vcsPropertiesHelper = new VcsPropertiesHelper(feature.getParameters(), vcsConstants); VcsApi vcsApi = vcsApiFactories.create(vcsPropertiesHelper); CommitStatus commitStatus = getCommitStatus(build.getBuildStatus(), buildStatus); updateStatus(build, vcsApi, commitStatus); } }
public void notifyBuildFailed(@NotNull SRunningBuild sRunningBuild, @NotNull Set<SUser> users) { sendNotification(sRunningBuild.getFullName(), sRunningBuild.getBuildNumber(), "failed: " + sRunningBuild.getStatusDescriptor().getText(), "danger", users, sRunningBuild); }
private String getStatusMessage(SRunningBuild build, CommitStatus commitStatus) { switch (commitStatus) { case ERROR: case FAILURE: case SUCCESS: String buildDescription = Strings.nullToEmpty(build.getStatusDescriptor().getText()); if (!buildDescription.isEmpty()) { buildDescription = " : " + buildDescription; } return build.getFullName() + buildDescription; case PENDING: return constants.getBuildStarted() + build.getFullName(); default: return ""; } }
BuildStateEnum buildState) { setBuildResult(sRunningBuild, previousBuild, buildState); setBuildFullName(sRunningBuild.getBuildType().getFullName()); setBuildName(sRunningBuild.getBuildType().getName()); if (sRunningBuild.getTriggeredBy().getUser() != null) { setTriggeredBySlackUserId(sRunningBuild.getTriggeredBy().getUser().getPropertyValue(SlackNotificator.USERID_KEY)); setTriggeredBy(sRunningBuild.getTriggeredBy().getAsString()); setBuildId(Long.toString(sRunningBuild.getBuildId())); setBuildTypeId(TeamCityIdResolver.getBuildTypeId(sRunningBuild.getBuildType())); setAgentName(sRunningBuild.getAgentName()); setElapsedTime(sRunningBuild.getElapsedTime()); if (sRunningBuild.getBranch() != null) { setBranch(sRunningBuild.getBranch()); setBranchDisplayName(getBranch().getDisplayName()); setBranchIsDefault(getBranch().isDefaultBranch()); setBuildDescriptionWithLinkSyntax(String.format("<" + getBuildStatusUrl() + "|" + getBuildResult() + " - " + sRunningBuild.getBuildType().getFullName() + " #" + sRunningBuild.getBuildNumber() + branchSuffix + ">"));
runnerContext.addRunnerParameter(BUILD_NUMBER, build.getBuildNumber()); runnerContext.addRunnerParameter(PROP_BUILD_TIMESTAMP, build.getStartDate().getTime() + ""); addProxyInfo(build.getAgentName(), runnerContext); SBuildType buildType = build.getBuildType(); if (buildType != null && shouldStoreBuildInRunHistory(runParameters)) { String customStorageId = build.getBuildTypeExternalId() + "#" + Long.toString(build.getBuildId()) + "#" + runnerContext.getId(); StringBuilder artifactoryUrlBuilder = new StringBuilder().append(serverConfigUrl); List<BuildRevision> revisionList = build.getRevisions(); if ((revisionList != null) && !revisionList.isEmpty()) { runnerContext.addRunnerParameter(PROP_VCS_REVISION, revisionList.get(0).getRevisionDisplayName());
public void handle(SRunningBuild build, BuildTriggerDescriptor trigger, BuildStatus buildStatus) throws IOException { LOGGER.log(Level.INFO, "Handling build status - Build Status: {0}, Branch: {1}, isSuccessful: {2}", new Object[]{buildStatus, build.getBranch().getName(), build.getBuildStatus().isSuccessful()}); Branch branch = build.getBranch(); if (branch != null) { SBuildType buildType = build.getBuildType(); PullRequestPropertiesHelper pullRequestPropertiesHelper = new PullRequestPropertiesHelper(trigger.getProperties(), vcsConstants, constants); VcsApi vcsApi = vcsApiFactories.create(pullRequestPropertiesHelper); PullRequest pullRequest = vcsApi.getPullRequestForBranch(branch.getName()); JsonCustomDataStorage<PullRequestBuild> dataStorage = getJsonDataStorage(buildType, trigger); PullRequestBuild pullRequestBuild = getPullRequestBuild(pullRequestPropertiesHelper, pullRequest, dataStorage); CommitStatus commitStatus = getCommitStatus(build.getBuildStatus(), buildStatus); Comment comment = updateStatus(build, vcsApi, pullRequest, pullRequestBuild, commitStatus); if (pullRequestPropertiesHelper.getApproveOnSuccessKey()) { updateApproval(vcsApi, pullRequest, commitStatus); } pullRequestBuild = new PullRequestBuild(pullRequest, build.getBuildStatus(), comment); dataStorage.putValue(getPullRequestKey(pullRequestPropertiesHelper, pullRequest), pullRequestBuild); } }
SlackProjectSettings projectSettings = (SlackProjectSettings) projectSettingsManager.getSettings(build.getProjectId(),"slackSettings"); String configuredChannel = build.getParametersProvider().get("SLACK_CHANNEL"); String channel = this.slackConfig.getDefaultChannel(); UserSet<SUser> committers = build.getCommitters(SelectPrevBuildPolicy.SINCE_LAST_BUILD); StringBuilder committersString = new StringBuilder(); buildField.addProperty("title" , "Build"); buildField.addProperty("short" , true); buildField.addProperty("value" , build.getBuildNumber()); fields.add(buildField); if( build.isHasRelatedIssues() ) Collection<Issue> issues = build.getRelatedIssues();
@Override public void updateStatus(String commitHash, String message, CommitStatus status, String targetUrl, SRunningBuild build) throws IOException, UnsupportedOperationException { String requestUrl = apiPaths.updateStatus(commitHash); HttpPost request = new HttpPost(requestUrl); request.setHeader(new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.getMimeType())); String entityAsJson = gson.toJson( new StashCommitStatus(status, build.getBuildTypeName() + build.getBuildId(), build.getFullName(), message, targetUrl)); request.setEntity(new StringEntity(entityAsJson)); executeRequest(httpClient, request, credentials); }
private void processBuildEvent(SRunningBuild sRunningBuild, BuildStateEnum state) { Loggers.SERVER.debug("About to process Slack notifications for " + sRunningBuild.getProjectId() + " at buildState " + state.getShortName()); for (SlackNotificationConfigWrapper slackNotificationConfigWrapper : getListOfEnabledSlackNotifications(sRunningBuild.getProjectId())){ if (state.equals(BuildStateEnum.BUILD_STARTED)){ slackNotificationConfigWrapper.slackNotification.setPayload(myManager.buildStarted(sRunningBuild, getPreviousNonPersonalBuild(sRunningBuild))); slackNotificationConfigWrapper.slackNotification.setEnabled(slackNotificationConfigWrapper.whc.isEnabledForBuildType(sRunningBuild.getBuildType()) && slackNotificationConfigWrapper.slackNotification.getBuildStates().enabled(BuildStateEnum.BUILD_STARTED)); } else if (state.equals(BuildStateEnum.BUILD_INTERRUPTED)){ slackNotificationConfigWrapper.slackNotification.setPayload(myManager.buildInterrupted(sRunningBuild, getPreviousNonPersonalBuild(sRunningBuild))); slackNotificationConfigWrapper.slackNotification.setEnabled(slackNotificationConfigWrapper.whc.isEnabledForBuildType(sRunningBuild.getBuildType()) && slackNotificationConfigWrapper.slackNotification.getBuildStates().enabled(BuildStateEnum.BUILD_INTERRUPTED)); } else if (state.equals(BuildStateEnum.BEFORE_BUILD_FINISHED)){ slackNotificationConfigWrapper.slackNotification.setPayload(myManager.beforeBuildFinish(sRunningBuild, getPreviousNonPersonalBuild(sRunningBuild))); slackNotificationConfigWrapper.slackNotification.setEnabled(slackNotificationConfigWrapper.whc.isEnabledForBuildType(sRunningBuild.getBuildType()) && slackNotificationConfigWrapper.slackNotification.getBuildStates().enabled(BuildStateEnum.BEFORE_BUILD_FINISHED)); } else if (state.equals(BuildStateEnum.BUILD_FINISHED)){ slackNotificationConfigWrapper.slackNotification.setEnabled(slackNotificationConfigWrapper.whc.isEnabledForBuildType(sRunningBuild.getBuildType()) && slackNotificationConfigWrapper.slackNotification.getBuildStates().enabled( BuildStateEnum.BUILD_FINISHED, sRunningBuild.getStatusDescriptor().isSuccessful(), this.hasBuildChangedHistoricalState(sRunningBuild))); slackNotificationConfigWrapper.slackNotification.setPayload(myManager.buildFinished(sRunningBuild, getPreviousNonPersonalBuild(sRunningBuild)));; } doPost(slackNotificationConfigWrapper.slackNotification); //Loggers.ACTIVITIES.debug("SlackNotificationListener :: " + myManager.getFormat(slackNotificationConfigWrapper.whc.getPayloadFormat()).getFormatDescription()); } }
private void onBuildFinished(final SRunningBuild build) { SBuildType buildType = build.getBuildType(); if (buildType == null) { return; } for (final BuildTriggerDescriptor trigger : buildType.getResolvedSettings().getBuildTriggersCollection()) { if (!trigger.getType().equals(TomcatStagingFeature.NAME)) { continue; } Branch branch = build.getBranch(); if (branch != null) { handleDeploy(build, trigger); } else { LOGGER.severe("Unknown branch name"); } } }
private void processSuccessfulBuild(SRunningBuild build) { String message = ""; PeriodFormatter durationFormatter = new PeriodFormatterBuilder() .printZeroRarelyFirst() .appendHours() .appendSuffix(" hour", " hours") .appendSeparator(" ") .printZeroRarelyLast() .appendMinutes() .appendSuffix(" minute", " minutes") .appendSeparator(" and ") .appendSeconds() .appendSuffix(" second", " seconds") .toFormatter(); Duration buildDuration = new Duration(1000*build.getDuration()); message = String.format("Project '%s' built successfully in %s." , build.getFullName() , durationFormatter.print(buildDuration.toPeriod())); postToSlack(build, message, true); }
@Override public void updateStatus(String commitHash, String message, CommitStatus status, String targetUrl, SRunningBuild build) throws IOException, UnsupportedOperationException { String requestUrl = apiPaths.updateStatus(repositoryOwner, repositoryName, commitHash); HttpPost request = new HttpPost(requestUrl); request.setHeader(new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.getMimeType())); String entityAsJson = gson.toJson( new BitbucketCommitStatus(status, build.getBuildTypeId(), build.getFullName(), message, targetUrl)); request.setEntity(new StringEntity(entityAsJson)); executeRequest(httpClient, request, credentials); }
private void postStartedBuild(SRunningBuild build ) { //Could put other into here. Agents maybe? String message = String.format("Project '%s' build started." , build.getFullName()); postToSlack(build, message, true); } private void postFailureBuild(SRunningBuild build )
private BuildTriggerDescriptor getTrigger(SRunningBuild build) { SBuildType buildType = build.getBuildType(); if (buildType == null) { return null; } for (BuildTriggerDescriptor trigger : buildType.getResolvedSettings().getBuildTriggersCollection()) { if (trigger.getType().equals(PullRequestsFeature.NAME)) { return trigger; } } return null; } }
@Override public void buildFinished(SRunningBuild build) { super.buildFinished(build); if( !build.isPersonal() && build.getBuildStatus().isSuccessful() && slackConfig.postSuccessful() ) { processSuccessfulBuild(build); } else if ( !build.isPersonal() && build.getBuildStatus().isFailed() && slackConfig.postFailed() ) { postFailureBuild(build); } else { //TODO - modify in future if we care about other states } }
private String getComment(SRunningBuild build) { return getComment(build.getBuildStatus()) + "(" + getTargetUrl(build) + ")"; }
private void deployArtifact(BuildArtifact buildArtifact, SRunningBuild build, String baseContext, TomcatManager tomcatManager, TomcatStagingDeploy stagingDeploy) throws TomcatManagerException, IOException { assert build.getBranch() != null; File artifact = new File(build.getArtifactsDirectory(), buildArtifact.getRelativePath()); String path = baseContext + "/" + build.getBranch().getName(); String tomcatBasePath = UrlUtils.extractBaseUrl(tomcatManager.getURL()); stagingDeploy.setWebPath(tomcatBasePath + path); TomcatManagerResponse response = tomcatManager.deploy(path, artifact, true, path, artifact.length()); if (HttpStatus.SC_OK != response.getStatusCode()) { throw new TomcatManagerException(response.getReasonPhrase()); } }
if (sRunningBuild.getStatusDescriptor().isSuccessful()){ this.buildResult = BUILD_STATUS_SUCCESS; this.color = "good";
private void onBuildStatusChanged(final SRunningBuild build, final BuildStatus buildStatus) { final BuildTriggerDescriptor trigger = getTrigger(build); if (trigger != null) { Branch branch = build.getBranch(); if (branch != null) { handleBuildStatus(build, buildStatus, trigger); } else { LOGGER.severe("Unknown branch name"); } } }