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 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   * @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          String username = ContinuumBuildAgentUtil.getUsername( context );
72  
73          ContinuumAgentBuildExecutor buildExecutor = buildAgentBuildExecutorManager.getBuildExecutor(
74              project.getExecutorId() );
75  
76          // ----------------------------------------------------------------------
77          // Make the buildResult
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 }