设置GCC和java公用一个生成模板类

This commit is contained in:
liqiankun 2017-05-25 12:34:45 +08:00
parent 45af6156d5
commit ec70b9f819
4 changed files with 16 additions and 84 deletions

View File

@ -1,65 +0,0 @@
package com.educoder.jenkins.model;
/**
* Created by Liqiankun on 2017/5/25 0025
* Description
*/
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.educoder.jenkins.utils.StringUtil;
public class GeneratePipelineGCC extends GeneratePipeline {
public GeneratePipelineGCC() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String generateChallengePipeline(Map<String,String> params) throws IOException {
// TODO Auto-generated method stub
String challengeTemplateFileName=params.get("challengeTemplateFileName");
String pipeline=StringUtil.getCofigureFileContent(challengeTemplateFileName);
/* //提取执行文件名称
String replacedStr[]=params.get("replaceExecuteCommand").split("#");
if(replacedStr.length<2 || replacedStr.length%2!=0){ throw new ArrayIndexOutOfBoundsException("提取执行文件名称的替换有误");}
String executeFileName = params.get("challengeProgramName");
for(int i=0;i<replacedStr.length;i=i+2)
{
executeFileName = executeFileName.replace(replacedStr[i], replacedStr[i+1]);
}*/
pipeline = pipeline.replace("COMPILECOMMAND", params.get("complieCommand"));
pipeline = pipeline.replace("EXECUTECOMMAND", params.get("executeCommand"));
pipeline = pipeline.replace("CHALLENGESTAGE", params.get("challengeStage"));
//生成编译文件路径c++编译多文件可以使用g++ /*.cpp这种形式把所有的cpp全部编译
String challengeProgramNameOrigin = params.get("challengeProgramName");
int lastPositon = challengeProgramNameOrigin.lastIndexOf("/");
String challengeProgramName = challengeProgramNameOrigin.substring(0,lastPositon+1) + "*.cpp";
//c++在编译时可以指定执行文件名在这里指定执行文件名是executeFile.out
String sourceClassName = challengeProgramNameOrigin.substring(0,lastPositon+1) + "executeFile.out";
pipeline = pipeline.replace("CHALLENGEPROGRAMNAME", challengeProgramName);
pipeline = pipeline.replace("SOURCECLASSNAME", sourceClassName);
pipeline = pipeline.replace("TRAININGID", params.get("trainingID"));
return pipeline;
}
/* (non-Javadoc)
* @see com.educoder.jenkins.model.GeneratePipeline#generateFullPipeline(java.util.Map)
*/
@Override
public String generateFullPipeline(Map<String, String> params) throws Exception {
// TODO Auto-generated method stub
String podTemplate=params.get("podTemplate");
String pipelineTemplateFileName=params.get("pipelineTemplateFileName");
String challengePipeline=params.get("challengePipeline");
String mainContainer=params.get("mainContainer");
String fullPipeline=StringUtil.getCofigureFileContent(pipelineTemplateFileName);
fullPipeline=fullPipeline.replaceFirst("MAINCONTAINER", mainContainer).replace("CHALLENGEPIPELINES", challengePipeline);
fullPipeline=podTemplate+fullPipeline;
return fullPipeline;
}
}

View File

@ -14,7 +14,10 @@ import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.educoder.jenkins.controller.GameController;
import com.educoder.jenkins.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
@ -27,17 +30,7 @@ import com.educoder.jenkins.utils.StringUtil;
*/
public class GeneratePipelineJava extends GeneratePipeline{
/**
* <一句话功能简述>
* <功能详细描述>
* @param CHALLENGESTAGE
* @param TRAININGID
* @param compileCommand
* @param executeCommand
* @param templateFileName
* @see [#方法#成员]
*/
private final static Logger logger = LoggerFactory.getLogger(GameController.class);
public GeneratePipelineJava() {
super();
// TODO Auto-generated constructor stub
@ -58,9 +51,10 @@ public class GeneratePipelineJava extends GeneratePipeline{
if(replacedStr.length<2 || replacedStr.length%2!=0){ throw new ArrayIndexOutOfBoundsException("提取执行文件名称的替换有误");}
String executeFileName = params.get("challengeProgramName");
for(int i=0;i<replacedStr.length;i=i+2)
{
{
executeFileName = executeFileName.replace(replacedStr[i], replacedStr[i+1]);
}
}
pipeline = pipeline.replace("COMPILECOMMAND", params.get("complieCommand"));
pipeline = pipeline.replace("EXECUTECOMMAND", params.get("executeCommand"));

View File

@ -34,7 +34,7 @@
<value>com.educoder.jenkins.model.GeneratePipelineJava</value>
<value>com.educoder.jenkins.model.GeneratePipelineJava</value>
<value>com.educoder.jenkins.model.GeneratePipelineJava</value>
<value>com.educoder.jenkins.model.GeneratePipelineGCC</value>
<value>com.educoder.jenkins.model.GeneratePipelineJava</value>
</list>
</property>
@ -98,7 +98,7 @@
<value>.java# #src/# </value>
<value>.py#.py</value>
<value>.java# #src/# </value>
<value></value>
<value>.cpp#.cpp</value>
</list>
</property>
</bean>

View File

@ -1,16 +1,19 @@
if (currentChallenge == CHALLENGESTAGE) {
//生成编译文件路径c++编译多文件可以使用g++ /*.cpp这种形式把所有的cpp全部编译
compileFile = new StringBuilder('CHALLENGEPROGRAMNAME');
lastPositon = compileFile.lastIndexOf('/');
compileFile = compileFile.substring(0,lastPositon+1) + '*.cpp';
compileResult = ''
try
{
// 编译程序
sh script: 'COMPILECOMMAND CHALLENGEPROGRAMNAME -o executeFile > compile_result_CHALLENGESTAGE.out 2>&1'
sh script: 'COMPILECOMMAND ' + compileFile + ' -o executeFile.out > compile_result_CHALLENGESTAGE.out 2>&1'
} catch(err)
{
//resubmit是以字符串的形式传进来的
//重复构建时需要删除之前构建的成功的class并catch掉class文件不存在的异常
catchError{
sh 'rm SOURCECLASSNAME'
sh 'rm executeFile.out'
}
}
@ -41,7 +44,7 @@ if (currentChallenge == CHALLENGESTAGE) {
catchError
{
sh script: 'EXECUTECOMMANDSOURCECLASSNAME < ../testCases/TRAININGID/CHALLENGESTAGE/' + i + '.in > actual_result_CHALLENGESTAGE_' + i + '.out 2>&1 '
sh script: 'EXECUTECOMMANDexecuteFile.out < ../testCases/TRAININGID/CHALLENGESTAGE/' + i + '.in > actual_result_CHALLENGESTAGE_' + i + '.out 2>&1 '
}
def outI = readFile 'actual_result_CHALLENGESTAGE_' + i + '.out'