From b3c96b1c53d8822a4af5e0f5e9df90f14d84b025 Mon Sep 17 00:00:00 2001 From: Damien Coraboeuf Date: Sat, 12 May 2018 19:50:18 +0200 Subject: [PATCH] #45 Build step --- pom.xml | 1 - .../jenkins/steps/OntrackBuildStep.java | 52 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0dd4d79..45053dc 100644 --- a/pom.xml +++ b/pom.xml @@ -106,7 +106,6 @@ org.jenkins-ci.plugins.workflow workflow-cps 2.19 - test org.jenkins-ci.plugins.workflow diff --git a/src/main/java/net/nemerosa/ontrack/jenkins/steps/OntrackBuildStep.java b/src/main/java/net/nemerosa/ontrack/jenkins/steps/OntrackBuildStep.java index 77021ea..249a48e 100644 --- a/src/main/java/net/nemerosa/ontrack/jenkins/steps/OntrackBuildStep.java +++ b/src/main/java/net/nemerosa/ontrack/jenkins/steps/OntrackBuildStep.java @@ -9,11 +9,17 @@ import net.nemerosa.ontrack.dsl.Ontrack; import net.nemerosa.ontrack.jenkins.dsl.OntrackDSLConnector; import org.apache.commons.lang.StringUtils; +import org.jenkinsci.plugins.workflow.actions.TimingAction; +import org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode; +import org.jenkinsci.plugins.workflow.graph.FlowNode; import org.jenkinsci.plugins.workflow.steps.*; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; import javax.annotation.Nonnull; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -90,12 +96,58 @@ protected Void run() throws Exception { if (StringUtils.isNotBlank(gitCommit)) { ontrackBuild.getConfig().gitCommit(gitCommit); } + // Collecting run info + Map runInfo = new HashMap<>(); + // Gets the (current) duration of the stage + FlowNode flowNode = context.get(FlowNode.class); + if (flowNode != null) { + Long durationSeconds = getTiming(flowNode); + // TODO Cause + // TODO URL + if (durationSeconds != null) { + runInfo.put("runTime", durationSeconds); + } + } + // If not empty, send the runtime + if (!runInfo.isEmpty()) { + ontrackBuild.setRunInfo(runInfo); + } // Done return null; } }; } + // org.jenkinsci.plugins.workflow.support.steps.StageStep + protected Long getTiming(FlowNode node) { + if (node instanceof StepStartNode) { + StepStartNode stepNode = (StepStartNode) node; + StepDescriptor stepDescriptor = stepNode.getDescriptor(); + if (stepDescriptor != null) { + String stepDescriptorId = stepDescriptor.getId(); + if ("org.jenkinsci.plugins.workflow.support.steps.StageStep".equals(stepDescriptorId)) { + TimingAction timingAction = node.getAction(TimingAction.class); + if (timingAction != null) { + long startTime = timingAction.getStartTime(); + return (System.currentTimeMillis() - startTime) / 1000; + } + } + } + } + return getTiming(node.getParents()); + } + + private Long getTiming(List nodes) { + for (FlowNode node : nodes) { + Long durationSeconds = getTiming(node); + if (durationSeconds != null) { + return durationSeconds; + } + } + return null; + } + + @Extension public static class DescriptorImpl extends StepDescriptor {