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 org.apache.continuum.buildagent.build.execution.ContinuumAgentBuildCancelledException;
23 import org.apache.continuum.buildagent.build.execution.ContinuumAgentBuildExecutionResult;
24 import org.apache.continuum.buildagent.build.execution.ContinuumAgentBuildExecutor;
25 import org.apache.continuum.buildagent.build.execution.manager.BuildAgentBuildExecutorManager;
26 import org.apache.continuum.buildagent.configuration.BuildAgentConfigurationService;
27 import org.apache.continuum.buildagent.utils.ContinuumBuildAgentUtil;
28 import org.apache.maven.continuum.model.project.BuildDefinition;
29 import org.apache.maven.continuum.model.project.BuildResult;
30 import org.apache.maven.continuum.model.project.Project;
31 import org.apache.maven.continuum.project.ContinuumProjectState;
32 import org.codehaus.plexus.action.AbstractAction;
33
34 import java.io.File;
35 import java.util.Date;
36 import java.util.Map;
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 String username = ContinuumBuildAgentUtil.getUsername( context );
72
73 ContinuumAgentBuildExecutor buildExecutor = buildAgentBuildExecutorManager.getBuildExecutor(
74 project.getExecutorId() );
75
76
77
78
79
80 BuildResult buildResult = new BuildResult();
81
82 buildResult.setStartTime( new Date().getTime() );
83
84 buildResult.setState( ContinuumProjectState.BUILDING );
85
86 buildResult.setTrigger( trigger );
87
88 buildResult.setUsername( username );
89
90 buildResult.setBuildDefinition( buildDefinition );
91
92 buildResult.setScmResult( ContinuumBuildAgentUtil.getScmResult( context, null ) );
93
94 context.put( ContinuumBuildAgentUtil.KEY_BUILD_RESULT, buildResult );
95
96 try
97 {
98 File buildOutputFile = buildAgentConfigurationService.getBuildOutputFile( project.getId() );
99
100 getLogger().debug( "Start building of project " + project.getId() );
101 ContinuumAgentBuildExecutionResult result = buildExecutor.build( project, buildDefinition, buildOutputFile,
102 environments, localRepository );
103
104 buildResult.setState( result.getExitCode() == 0 ? ContinuumProjectState.OK : ContinuumProjectState.FAILED );
105
106 buildResult.setExitCode( result.getExitCode() );
107 }
108 catch ( ContinuumAgentBuildCancelledException e )
109 {
110 getLogger().info( "Cancelled build" );
111
112 buildResult.setState( ContinuumProjectState.CANCELLED );
113 }
114 catch ( Throwable e )
115 {
116 getLogger().error( "Error running buildResult", e );
117
118 buildResult.setState( ContinuumProjectState.ERROR );
119
120 buildResult.setError( ContinuumBuildAgentUtil.throwableToString( e ) );
121 }
122 finally
123 {
124 buildResult.setEndTime( new Date().getTime() );
125
126 if ( buildResult.getState() != ContinuumProjectState.OK &&
127 buildResult.getState() != ContinuumProjectState.FAILED &&
128 buildResult.getState() != ContinuumProjectState.ERROR &&
129 buildResult.getState() != ContinuumProjectState.CANCELLED )
130 {
131 buildResult.setState( ContinuumProjectState.ERROR );
132 }
133
134 context.put( ContinuumBuildAgentUtil.KEY_BUILD_RESULT, buildResult );
135 }
136 }
137 }