2017-07-26 38 views
1

我想创建一个新的buildstep到TeamCity中,并且因为您需要创建一个buildrunner来这样做,所以我正在尝试自己创建一个。
我用Server和Agentside命令创建了一个新的Mavenproject>https://confluence.jetbrains.com/display/TCD10/Developing+Plugins+Using+Maven <。
现在到我的问题:我想创建一个新的buildstep,并且我也查看了TeamCity的示例插件,例如FxCop跑步者并试图了解它是如何工作的。
我在服务器包中创建了一个editParams.jsp和一个viewParams.jsp。我还创建了一个CustomRunType.java和一个CustomRunTypePropertieProcessor.java。
好处是buildstep的名字显示在TC中,但坏的是,当我选择自定义buildstep时什么也没有发生,我的意思是没有显示文本字段。

TeamCity BuildRunner插件

editParams.jsp:

<%@ taglib prefix="props" tagdir="/WEB-INF/tags/props" %> <br> 
<%@ taglib prefix="forms" tagdir="/WEB-INF/tags/forms" %><br> 
<%@ taglib prefix="l" tagdir="/WEB-INF/tags/layout" %><br> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<jsp:useBean id="propertiesBean" scope="request" type="jetbrains.buildServer.controllers.BasePropertiesBean"/> 

<l:settingsGroup title="myTitle"> 
    <tr> 
     <th><label for="Name" title="Name">Name: <span class="mandatoryAsterix" title="Mandatory field">*</span></label></th> 
      <td> 
       <props:textProperty name="Name" className="longField" /> 
       <span class="error" id="error_Name"></span> 
       <span class="smallNote">Enter the Name.</span> 
      </td> 
    </tr> 
</l:settingsGroup> 

viewParams.jsp:

<!-- Pretty sure that here is the mistake, but no idea how to fix--> 
<jsp:useBean id="propertiesBean" scope="request" type="jetbrains.buildServer.controllers.BasePropertiesBean"/> 

CustomRunTypeProppertyProcessor.java:

import jetbrains.buildServer.serverSide.InvalidProperty; 
import jetbrains.buildServer.serverSide.PropertiesProcessor; 
import jetbrains.buildServer.util.PropertiesUtil; 

import java.util.Collection; 
import java.util.List; 
import java.util.Map; 
import java.util.Vector; 

public class CustomRunTypePropertiesProcessor implements PropertiesProcessor { 
    @Override 
    public Collection<InvalidProperty> process(Map<String, String> map) { 
     List<InvalidProperty> result = new Vector(); 
     String name = (String)map.get("Name"); 

     if (PropertiesUtil.isEmptyOrNull(name)) { 
      result.add(new InvalidProperty("Name", "Name must be specified.")); 
     } 
     return result; 
    } 
} 

CustomRunType.java:

import java.util.Map; 
import jetbrains.buildServer.serverSide.PropertiesProcessor; 
import jetbrains.buildServer.serverSide.RunType; 
import jetbrains.buildServer.serverSide.RunTypeRegistry; 
import jetbrains.buildServer.web.openapi.PluginDescriptor; 
import org.jetbrains.annotations.NotNull; 
import org.jetbrains.annotations.Nullable; 

public class CustomRunType extends RunType { 
    public CustomRunType(RunTypeRegistry runTypeRegistry, PluginDescriptor pluginDescriptor) { 
     runTypeRegistry.registerRunType(this); 
    } 

    @NotNull 
    @Override 
    public String getType() { 
     return "CustomPlugin"; 
    } 

    @NotNull 
    @Override 
    public String getDisplayName() { 
     return "CustomPlugin"; 
    } 

    @NotNull 
    @Override 
    public String getDescription() { 
     return "CustomPlugin"; 
    } 

    @Nullable 
    @Override 
    public PropertiesProcessor getRunnerPropertiesProcessor() { 
     return new CustomRunTypePropertiesProcessor(); 
    } 

    @Nullable 
    @Override 
    public String getEditRunnerParamsJspFilePath() { 
     return "editParams.jsp"; 
    } 

    @Nullable 
    @Override 
    public String getViewRunnerParamsJspFilePath() { 
     return "viewParams.jsp"; 
    } 

    @Nullable 
    @Override 
    public Map<String, String> getDefaultRunnerProperties() { 
     return null; 
    } 
} 

我想知道是否有人知道我做错了什么,或者我忘记了什么,或者在最好的情况下如何解决这个问题或者一个简单的例子。

感谢您的阅读!

回答

0

通常,只有在editParams.jsp和viewParams.jsp的路径不正确时才会发生。 尝试像this

private final PluginDescriptor myPluginDescriptor;

public CostumRunType(final RunTypeRegistry runTypeRegistry, final 
PluginDescriptor pluginDescriptor) { 
    myPluginDescriptor = pluginDescriptor; 
    runTypeRegistry.registerRunType(this); 
} 

@Override 
public String getEditRunnerParamsJspFilePath() { 
    return myPluginDescriptor.getPluginResourcesPath("editRunParams.jsp"); 
} 

@Override 
public String getViewRunnerParamsJspFilePath() { 
    return myPluginDescriptor.getPluginResourcesPath("viewRunParams.jsp"); 
} 
+0

那你这个,这个工程:-) –