1 package org.apache.continuum.buildagent.action;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Date;
24 import java.util.Map;
25
26 import org.apache.continuum.buildagent.build.execution.ContinuumAgentBuildCancelledException;
27 import org.apache.continuum.buildagent.build.execution.ContinuumAgentBuildExecutionResult;
28 import org.apache.continuum.buildagent.build.execution.ContinuumAgentBuildExecutor;
29 import org.apache.continuum.buildagent.build.execution.manager.BuildAgentBuildExecutorManager;
30 import org.apache.continuum.buildagent.configuration.BuildAgentConfigurationService;
31 import org.apache.continuum.buildagent.utils.ContinuumBuildAgentUtil;
32 import org.apache.maven.continuum.model.project.BuildDefinition;
33 import org.apache.maven.continuum.model.project.BuildResult;
34 import org.apache.maven.continuum.model.project.Project;
35 import org.apache.maven.continuum.project.ContinuumProjectState;
36 import org.codehaus.plexus.action.AbstractAction;
37
38
39
40
41 public class ExecuteBuilderAction
42 extends AbstractAction
43 {
44
45
46
47 private BuildAgentBuildExecutorManager buildAgentBuildExecutorManager;
48
49
50
51
52 private BuildAgentConfigurationService buildAgentConfigurationService;
53
54 public void execute( Map context )
55 throws Exception
56 {
57
58
59
60
61 Project project = ContinuumBuildAgentUtil.getProject( context );
62
63 BuildDefinition buildDefinition = ContinuumBuildAgentUtil.getBuildDefinition( context );
64
65 Map<String, String> environments = ContinuumBuildAgentUtil.getEnvironments( context );
66
67 String localRepository = ContinuumBuildAgentUtil.getLocalRepository( context );
68
69 int trigger = ContinuumBuildAgentUtil.getTrigger( context );
70
71 ContinuumAgentBuildExecutor buildExecutor = buildAgentBuildExecutorManager.getBuildExecutor( project.getExecutorId() );
72
73
74
75
76
77 BuildResult buildResult = new BuildResult();
78
79 buildResult.setStartTime( new Date().getTime() );
80
81 buildResult.setState( ContinuumProjectState.BUILDING );
82
83 buildResult.setTrigger( trigger );
84
85 buildResult.setBuildDefinition( buildDefinition );
86
87 buildResult.setScmResult( ContinuumBuildAgentUtil.getScmResult( context, null ) );
88
89 context.put( ContinuumBuildAgentUtil.KEY_BUILD_RESULT, buildResult );
90
91 try
92 {
93 File buildOutputFile = buildAgentConfigurationService.getBuildOutputFile( project.getId() );
94
95 ContinuumAgentBuildExecutionResult result = buildExecutor.build( project, buildDefinition, buildOutputFile,
96 environments, localRepository );
97
98 buildResult.setState( result.getExitCode() == 0 ? ContinuumProjectState.OK : ContinuumProjectState.FAILED );
99
100 buildResult.setExitCode( result.getExitCode() );
101 }
102 catch ( ContinuumAgentBuildCancelledException e )
103 {
104 getLogger().info( "Cancelled build" );
105
106 buildResult.setState( ContinuumProjectState.CANCELLED );
107 }
108 catch ( Throwable e )
109 {
110 getLogger().error( "Error running buildResult", e );
111
112 buildResult.setState( ContinuumProjectState.ERROR );
113
114 buildResult.setError( ContinuumBuildAgentUtil.throwableToString( e ) );
115 }
116 finally
117 {
118 buildResult.setEndTime( new Date().getTime() );
119
120 if ( buildResult.getState() != ContinuumProjectState.OK &&
121 buildResult.getState() != ContinuumProjectState.FAILED &&
122 buildResult.getState() != ContinuumProjectState.ERROR &&
123 buildResult.getState() != ContinuumProjectState.CANCELLED )
124 {
125 buildResult.setState( ContinuumProjectState.ERROR );
126 }
127
128 context.put( ContinuumBuildAgentUtil.KEY_BUILD_RESULT, buildResult );
129 }
130 }
131 }