View Javadoc

1   package org.apache.continuum.buildagent.action;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * @plexus.component role="org.codehaus.plexus.action.Action" role-hint="execute-agent-builder"
40   */
41  public class ExecuteBuilderAction
42      extends AbstractAction
43  {
44      /**
45       * @plexus.requirement
46       */
47      private BuildAgentBuildExecutorManager buildAgentBuildExecutorManager;
48  
49      /**
50       * @plexus.requirement
51       */
52      private BuildAgentConfigurationService buildAgentConfigurationService;
53  
54      public void execute( Map context )
55          throws Exception
56      {
57          // ----------------------------------------------------------------------
58          // Get parameters from the context
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          // Make the buildResult
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 }