修改发布实训:
写测试用例后,不删除job, 每次创建job之前先查看是否存在,如果存在则更新,不存在则创建 Merge branch 'develop' of https://git.trustie.net/Hjqreturn/training_project into develop # Conflicts: # jenkins-exec/doc/allclasses-frame.html # jenkins-exec/doc/allclasses-noframe.html # jenkins-exec/doc/com/educoder/jenkins/controller/GameController.html # jenkins-exec/doc/com/educoder/jenkins/controller/package-frame.html # jenkins-exec/doc/com/educoder/jenkins/controller/package-summary.html # jenkins-exec/doc/constant-values.html # jenkins-exec/doc/help-doc.html # jenkins-exec/doc/index-files/index-1.html # jenkins-exec/doc/index-files/index-2.html # jenkins-exec/doc/index-files/index-3.html # jenkins-exec/doc/index-files/index-4.html # jenkins-exec/doc/index-files/index-5.html # jenkins-exec/doc/index.html # jenkins-exec/doc/stylesheet.css # jenkins-exec/src/main/java/com/educoder/jenkins/controller/GameController.java
This commit is contained in:
commit
d44c136e80
|
@ -338,6 +338,7 @@ public class JenkinsHttpClient {
|
|||
if (xml_data != null) {
|
||||
request.setEntity(new StringEntity(xml_data, ContentType.create("text/xml", "utf-8")));
|
||||
}
|
||||
|
||||
HttpResponse response = client.execute(request, localContext);
|
||||
getJenkinsVersionFromHeader(response);
|
||||
try {
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.offbytwo.jenkins.client.validator;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpResponseException;
|
||||
|
@ -9,6 +11,7 @@ public class HttpResponseValidator {
|
|||
public void validateResponse(HttpResponse response) throws HttpResponseException {
|
||||
int status = response.getStatusLine().getStatusCode();
|
||||
if (status < 200 || status >= 400) {
|
||||
if(404 == status) System.out.println("response:404");
|
||||
Header[] headers = response.getHeaders("X-Error");
|
||||
if (headers.length>0){
|
||||
throw new HttpResponseException(status, headers[0].getValue());
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>所有类</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>所有类</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>所有类</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>所有类</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>GameController</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>GameController</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../../../../script.js"></script>
|
||||
</head>
|
||||
|
@ -19,8 +26,13 @@
|
|||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
<<<<<<< HEAD
|
||||
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
|
||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||
=======
|
||||
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
|
||||
var tabs = {65535:["t0","所有方法"],2:["t2","实例方法"],8:["t4","具体方法"]};
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
var altColor = "altColor";
|
||||
var rowColor = "rowColor";
|
||||
var tableTab = "tableTab";
|
||||
|
@ -29,6 +41,69 @@ var activeTableTab = "activeTableTab";
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li class="navBarCell1Rev">类</li>
|
||||
<li><a href="class-use/GameController.html">使用</a></li>
|
||||
<li><a href="package-tree.html">树</a></li>
|
||||
<li><a href="../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个类</li>
|
||||
<li>下一个类</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../index.html?com/educoder/jenkins/controller/GameController.html" target="_top">框架</a></li>
|
||||
<li><a href="GameController.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<div>
|
||||
<ul class="subNavList">
|
||||
<li>概要: </li>
|
||||
<li>嵌套 | </li>
|
||||
<li>字段 | </li>
|
||||
<li><a href="#constructor.summary">构造器</a> | </li>
|
||||
<li><a href="#method.summary">方法</a></li>
|
||||
</ul>
|
||||
<ul class="subNavList">
|
||||
<li>详细资料: </li>
|
||||
<li>字段 | </li>
|
||||
<li><a href="#constructor.detail">构造器</a> | </li>
|
||||
<li><a href="#method.detail">方法</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<!-- ======== START OF CLASS DATA ======== -->
|
||||
<div class="header">
|
||||
<div class="subTitle">com.educoder.jenkins.controller</div>
|
||||
|
@ -57,6 +132,7 @@ var activeTableTab = "activeTableTab";
|
|||
@RequestMapping(value="/game")
|
||||
public class <span class="typeNameLabel">GameController</span>
|
||||
extends com.educoder.jenkins.controller.BaseController</pre>
|
||||
<<<<<<< HEAD
|
||||
<dl>
|
||||
<dt><span class="simpleTagLabel">版本:</span></dt>
|
||||
<dd>0.1</dd>
|
||||
|
@ -64,6 +140,12 @@ extends com.educoder.jenkins.controller.BaseController</pre>
|
|||
<dd>lqk</dd>
|
||||
<dt><span class="seeLabel">另请参阅:</span></dt>
|
||||
<dd><p>为每次构建创建一个线程,用以放入线程池实现对构建任务的管理</p></dd>
|
||||
=======
|
||||
<div class="block">生成脚本、发布实训、开启实训、写测试用例、删除job</div>
|
||||
<dl>
|
||||
<dt><span class="simpleTagLabel">作者:</span></dt>
|
||||
<dd>李乾坤</dd>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -95,24 +177,44 @@ extends com.educoder.jenkins.controller.BaseController</pre>
|
|||
</a>
|
||||
<h3>方法概要</h3>
|
||||
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="方法概要表, 列表方法和解释">
|
||||
<<<<<<< HEAD
|
||||
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
|
||||
=======
|
||||
<caption><span id="t0" class="activeTableTab"><span>所有方法</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">实例方法</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">具体方法</a></span><span class="tabEnd"> </span></span></caption>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<tr>
|
||||
<th class="colFirst" scope="col">限定符和类型</th>
|
||||
<th class="colLast" scope="col">方法和说明</th>
|
||||
</tr>
|
||||
<tr id="i0" class="altColor">
|
||||
<td class="colFirst"><code>com.alibaba.fastjson.JSONObject</code></td>
|
||||
<<<<<<< HEAD
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/educoder/jenkins/controller/GameController.html#deleteJob-java.lang.String-">deleteJob</a></span>(java.lang.String jobName)</code> </td>
|
||||
</tr>
|
||||
<tr id="i1" class="rowColor">
|
||||
<td class="colFirst"><code>java.lang.String</code></td>
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/educoder/jenkins/controller/GameController.html#generatePipelineScriptForChallenge-java.lang.String-">generatePipelineScriptForChallenge</a></span>(java.lang.String challengeInfo)</code> </td>
|
||||
=======
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/educoder/jenkins/controller/GameController.html#deleteJob-java.lang.String-">deleteJob</a></span>(java.lang.String jobName)</code>
|
||||
<div class="block">根据job名称删除指定job</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i1" class="rowColor">
|
||||
<td class="colFirst"><code>java.lang.String</code></td>
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/educoder/jenkins/controller/GameController.html#generatePipelineScriptForChallenge-java.lang.String-">generatePipelineScriptForChallenge</a></span>(java.lang.String challengeInfo)</code>
|
||||
<div class="block">逐个生成各个关卡的pipeline。</div>
|
||||
</td>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</tr>
|
||||
<tr id="i2" class="altColor">
|
||||
<td class="colFirst"><code>java.lang.String</code></td>
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/educoder/jenkins/controller/GameController.html#generatePipelineScriptForGame-java.lang.String-">generatePipelineScriptForGame</a></span>(java.lang.String gameInfo)</code>
|
||||
<<<<<<< HEAD
|
||||
<div class="block">trustie将各个关卡的pipeline连同运行环境,以JSON格式传给中间层服务器
|
||||
中间层服务器接收参数,并将其和java.template.pipeline这一模板进行组成, 生成整个Job的总脚本。</div>
|
||||
=======
|
||||
<div class="block">生成整个实训的pipeline<br></div>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="i3" class="rowColor">
|
||||
|
@ -123,11 +225,17 @@ extends com.educoder.jenkins.controller.BaseController</pre>
|
|||
</tr>
|
||||
<tr id="i4" class="altColor">
|
||||
<td class="colFirst"><code>com.alibaba.fastjson.JSONObject</code></td>
|
||||
<<<<<<< HEAD
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/educoder/jenkins/controller/GameController.html#publishGame-java.lang.String-">publishGame</a></span>(java.lang.String gameInfo)</code> </td>
|
||||
</tr>
|
||||
<tr id="i5" class="rowColor">
|
||||
<td class="colFirst"><code>void</code></td>
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/educoder/jenkins/controller/GameController.html#test--">test</a></span>()</code> </td>
|
||||
=======
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/educoder/jenkins/controller/GameController.html#publishGame-java.lang.String-">publishGame</a></span>(java.lang.String gameInfo)</code>
|
||||
<div class="block">发布实训并将测试用例写入服务器的文件中.</div>
|
||||
</td>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</tr>
|
||||
</table>
|
||||
<ul class="blockList">
|
||||
|
@ -175,6 +283,7 @@ extends com.educoder.jenkins.controller.BaseController</pre>
|
|||
<!-- -->
|
||||
</a>
|
||||
<h3>方法详细资料</h3>
|
||||
<<<<<<< HEAD
|
||||
<a name="test--">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
@ -186,10 +295,14 @@ public void test()</pre>
|
|||
</li>
|
||||
</ul>
|
||||
<a name="publishGame-java.lang.String-">
|
||||
=======
|
||||
<a name="deleteJob-java.lang.String-">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<<<<<<< HEAD
|
||||
<h4>publishGame</h4>
|
||||
<pre>@RequestMapping(path="/publishGame")
|
||||
public com.alibaba.fastjson.JSONObject publishGame(@RequestParam
|
||||
|
@ -204,6 +317,21 @@ public com.alibaba.fastjson.JSONObject publishGame(@RequestParam
|
|||
<dd><code>java.net.URISyntaxException</code></dd>
|
||||
<dd><code>java.io.IOException</code></dd>
|
||||
<dd><code>java.lang.Exception</code></dd>
|
||||
=======
|
||||
<h4>deleteJob</h4>
|
||||
<pre>@RequestMapping(path="/deleteJob")
|
||||
public com.alibaba.fastjson.JSONObject deleteJob(@RequestParam
|
||||
java.lang.String jobName)
|
||||
throws java.io.IOException</pre>
|
||||
<div class="block">根据job名称删除指定job</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">参数:</span></dt>
|
||||
<dd><code>jobName</code> - 需要删除的job名称</dd>
|
||||
<dt><span class="returnLabel">返回:</span></dt>
|
||||
<dd>-1 删除失败;0 删除成功</dd>
|
||||
<dt><span class="throwsLabel">抛出:</span></dt>
|
||||
<dd><code>java.io.IOException</code></dd>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -213,12 +341,25 @@ public com.alibaba.fastjson.JSONObject publishGame(@RequestParam
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>generatePipelineScriptForChallenge</h4>
|
||||
<<<<<<< HEAD
|
||||
<pre>public java.lang.String generatePipelineScriptForChallenge(@RequestParam
|
||||
java.lang.String challengeInfo)
|
||||
throws java.lang.Exception</pre>
|
||||
<dl>
|
||||
<dt><span class="throwsLabel">抛出:</span></dt>
|
||||
<dd><code>java.lang.Exception</code></dd>
|
||||
=======
|
||||
<pre>public java.lang.String generatePipelineScriptForChallenge(java.lang.String challengeInfo)
|
||||
throws java.lang.Exception</pre>
|
||||
<div class="block">逐个生成各个关卡的pipeline。</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">参数:</span></dt>
|
||||
<dd><code>challengeInfo</code> - 各个关卡的信息</dd>
|
||||
<dt><span class="returnLabel">返回:</span></dt>
|
||||
<dd>各个关卡的pipeline的组合</dd>
|
||||
<dt><span class="throwsLabel">抛出:</span></dt>
|
||||
<dd><code>java.lang.Exception</code> - <p>challengeInfo的格式请参考<code>publishGame</code>中的参数介绍</dd>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -228,6 +369,7 @@ public com.alibaba.fastjson.JSONObject publishGame(@RequestParam
|
|||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>generatePipelineScriptForGame</h4>
|
||||
<<<<<<< HEAD
|
||||
<pre>public java.lang.String generatePipelineScriptForGame(@RequestParam
|
||||
java.lang.String gameInfo)</pre>
|
||||
<div class="block">trustie将各个关卡的pipeline连同运行环境,以JSON格式传给中间层服务器
|
||||
|
@ -236,6 +378,19 @@ public com.alibaba.fastjson.JSONObject publishGame(@RequestParam
|
|||
<dt><span class="paramLabel">参数:</span></dt>
|
||||
<dd><code>gameInfo</code> - </dd>
|
||||
<dt><span class="returnLabel">返回:</span></dt>
|
||||
=======
|
||||
<pre>public java.lang.String generatePipelineScriptForGame(java.lang.String gameInfo)
|
||||
throws com.educoder.jenkins.Exceptions.ExceptionOfEnvironmentNotExist,
|
||||
java.lang.ClassCastException</pre>
|
||||
<div class="block">生成整个实训的pipeline<br></div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">参数:</span></dt>
|
||||
<dd><code>gameInfo</code> - 实训的各种配置信息</dd>
|
||||
<dt><span class="returnLabel">返回:</span></dt>
|
||||
<dt><span class="throwsLabel">抛出:</span></dt>
|
||||
<dd><code>com.educoder.jenkins.Exceptions.ExceptionOfEnvironmentNotExist</code></dd>
|
||||
<dd><code>java.lang.ClassCastException</code> - <p>gameInfo的具体格式请参见<code>publishGame</code></dd>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -259,11 +414,16 @@ public com.alibaba.fastjson.JSONObject openGameInstance(@RequestParam
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<<<<<<< HEAD
|
||||
<a name="deleteJob-java.lang.String-">
|
||||
=======
|
||||
<a name="publishGame-java.lang.String-">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockListLast">
|
||||
<li class="blockList">
|
||||
<<<<<<< HEAD
|
||||
<h4>deleteJob</h4>
|
||||
<pre>@RequestMapping(path="/deleteJob")
|
||||
public com.alibaba.fastjson.JSONObject deleteJob(@RequestParam
|
||||
|
@ -272,6 +432,35 @@ public com.alibaba.fastjson.JSONObject deleteJob(@RequestParam
|
|||
<dl>
|
||||
<dt><span class="throwsLabel">抛出:</span></dt>
|
||||
<dd><code>java.io.IOException</code></dd>
|
||||
=======
|
||||
<h4>publishGame</h4>
|
||||
<pre>@RequestMapping(path="/publishGame")
|
||||
public com.alibaba.fastjson.JSONObject publishGame(@RequestParam
|
||||
java.lang.String gameInfo)
|
||||
throws java.lang.Exception</pre>
|
||||
<div class="block">发布实训并将测试用例写入服务器的文件中.<br>并监控写测试用例的结果,等其出错时返回指定信息给trustie<br>
|
||||
<p>gameInfo的格式如下:
|
||||
gameInfo:{"gameID":"123","operationEnvironment": "Python",
|
||||
"challengeInfo":[{"challengeStage":"1","challengeType":1,"challengeProgramName":"hello.py","operationEnvironment":"Python","trainingID":"1"}],
|
||||
"testCases":[{"challengeStage":"1","challengeTestCases":[{"caseId":"35","input":"1","output":"1","isPublic":"1"}]}]
|
||||
}
|
||||
challengeStage:当前关卡<br>
|
||||
operationEnvironment:运行环境<br>
|
||||
challengeProgramName:执行文件<br>
|
||||
trainingID:对应每一实训的唯一ID<br>
|
||||
testCases:包含测试集输入输出信息的JSON数组</div>
|
||||
<dl>
|
||||
<dt><span class="paramLabel">参数:</span></dt>
|
||||
<dd><code>gameInfo:实训的各种配置信息</code> - </dd>
|
||||
<dt><span class="returnLabel">返回:</span></dt>
|
||||
<dd>写测试用例是否成功。code:0 写入成功;-1 写入失败</dd>
|
||||
<dt><span class="throwsLabel">抛出:</span></dt>
|
||||
<dd><code>java.net.URISyntaxException</code></dd>
|
||||
<dd><code>java.io.IOException</code></dd>
|
||||
<dd><code>java.lang.Exception</code></dd>
|
||||
<dt><span class="seeLabel">另请参阅:</span></dt>
|
||||
<dd><a href="../../../../com/educoder/jenkins/controller/GameController.html#generateTestCasesForGame-java.lang.String-java.lang.String-"><code>generateTestCasesForGame(java.lang.String, java.lang.String)</code></a></dd>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -282,5 +471,68 @@ public com.alibaba.fastjson.JSONObject deleteJob(@RequestParam
|
|||
</div>
|
||||
</div>
|
||||
<!-- ========= END OF CLASS DATA ========= -->
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li class="navBarCell1Rev">类</li>
|
||||
<li><a href="class-use/GameController.html">使用</a></li>
|
||||
<li><a href="package-tree.html">树</a></li>
|
||||
<li><a href="../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个类</li>
|
||||
<li>下一个类</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../index.html?com/educoder/jenkins/controller/GameController.html" target="_top">框架</a></li>
|
||||
<li><a href="GameController.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<div>
|
||||
<ul class="subNavList">
|
||||
<li>概要: </li>
|
||||
<li>嵌套 | </li>
|
||||
<li>字段 | </li>
|
||||
<li><a href="#constructor.summary">构造器</a> | </li>
|
||||
<li><a href="#method.summary">方法</a></li>
|
||||
</ul>
|
||||
<ul class="subNavList">
|
||||
<li>详细资料: </li>
|
||||
<li>字段 | </li>
|
||||
<li><a href="#constructor.detail">构造器</a> | </li>
|
||||
<li><a href="#method.detail">方法</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>类 com.educoder.jenkins.controller.GameController的使用</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../../../../../script.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript"><!--
|
||||
try {
|
||||
if (location.href.indexOf('is-external=true') == -1) {
|
||||
parent.document.title="\u7C7B com.educoder.jenkins.controller.GameController\u7684\u4F7F\u7528";
|
||||
}
|
||||
}
|
||||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li><a href="../../../../../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">类</a></li>
|
||||
<li class="navBarCell1Rev">使用</li>
|
||||
<li><a href="../../../../../overview-tree.html">树</a></li>
|
||||
<li><a href="../../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../../index.html?com/educoder/jenkins/controller/class-use/GameController.html" target="_top">框架</a></li>
|
||||
<li><a href="GameController.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="header">
|
||||
<h2 title="类的使用 com.educoder.jenkins.controller.GameController" class="title">类的使用<br>com.educoder.jenkins.controller.GameController</h2>
|
||||
</div>
|
||||
<div class="classUseContainer">没有com.educoder.jenkins.controller.GameController的用法</div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li><a href="../../../../../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">类</a></li>
|
||||
<li class="navBarCell1Rev">使用</li>
|
||||
<li><a href="../../../../../overview-tree.html">树</a></li>
|
||||
<li><a href="../../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../../index.html?com/educoder/jenkins/controller/class-use/GameController.html" target="_top">框架</a></li>
|
||||
<li><a href="GameController.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
</body>
|
||||
</html>
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>com.educoder.jenkins.controller</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>com.educoder.jenkins.controller</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../../../../script.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>com.educoder.jenkins.controller</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>com.educoder.jenkins.controller</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../../../../script.js"></script>
|
||||
</head>
|
||||
|
@ -23,6 +30,54 @@
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li><a href="package-use.html">使用</a></li>
|
||||
<li><a href="package-tree.html">树</a></li>
|
||||
<li><a href="../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个程序包</li>
|
||||
<li>下一个程序包</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../index.html?com/educoder/jenkins/controller/package-summary.html" target="_top">框架</a></li>
|
||||
<li><a href="package-summary.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<div class="header">
|
||||
<h1 title="程序包" class="title">程序包 com.educoder.jenkins.controller</h1>
|
||||
</div>
|
||||
|
@ -38,12 +93,66 @@
|
|||
<tbody>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><a href="../../../../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">GameController</a></td>
|
||||
<<<<<<< HEAD
|
||||
<td class="colLast"> </td>
|
||||
=======
|
||||
<td class="colLast">
|
||||
<div class="block">生成脚本、发布实训、开启实训、写测试用例、删除job</div>
|
||||
</td>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li><a href="package-use.html">使用</a></li>
|
||||
<li><a href="package-tree.html">树</a></li>
|
||||
<li><a href="../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个程序包</li>
|
||||
<li>下一个程序包</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../index.html?com/educoder/jenkins/controller/package-summary.html" target="_top">框架</a></li>
|
||||
<li><a href="package-summary.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>com.educoder.jenkins.controller 类分层结构</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../../../../script.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript"><!--
|
||||
try {
|
||||
if (location.href.indexOf('is-external=true') == -1) {
|
||||
parent.document.title="com.educoder.jenkins.controller \u7C7B\u5206\u5C42\u7ED3\u6784";
|
||||
}
|
||||
}
|
||||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li class="navBarCell1Rev">树</li>
|
||||
<li><a href="../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../index.html?com/educoder/jenkins/controller/package-tree.html" target="_top">框架</a></li>
|
||||
<li><a href="package-tree.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="header">
|
||||
<h1 class="title">程序包com.educoder.jenkins.controller的分层结构</h1>
|
||||
</div>
|
||||
<div class="contentContainer">
|
||||
<h2 title="类分层结构">类分层结构</h2>
|
||||
<ul>
|
||||
<li type="circle">java.lang.Object
|
||||
<ul>
|
||||
<li type="circle">com.educoder.jenkins.controller.BaseController
|
||||
<ul>
|
||||
<li type="circle">com.educoder.jenkins.controller.<a href="../../../../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类"><span class="typeNameLink">GameController</span></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li class="navBarCell1Rev">树</li>
|
||||
<li><a href="../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../index.html?com/educoder/jenkins/controller/package-tree.html" target="_top">框架</a></li>
|
||||
<li><a href="package-tree.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,141 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>程序包 com.educoder.jenkins.controller的使用</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../../../../script.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript"><!--
|
||||
try {
|
||||
if (location.href.indexOf('is-external=true') == -1) {
|
||||
parent.document.title="\u7A0B\u5E8F\u5305 com.educoder.jenkins.controller\u7684\u4F7F\u7528";
|
||||
}
|
||||
}
|
||||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li class="navBarCell1Rev">使用</li>
|
||||
<li><a href="package-tree.html">树</a></li>
|
||||
<li><a href="../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../index.html?com/educoder/jenkins/controller/package-use.html" target="_top">框架</a></li>
|
||||
<li><a href="package-use.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="header">
|
||||
<h1 title="程序包的使用 com.educoder.jenkins.controller" class="title">程序包的使用<br>com.educoder.jenkins.controller</h1>
|
||||
</div>
|
||||
<div class="contentContainer">
|
||||
<ul class="blockList">
|
||||
<li class="blockList"><a name="com.educoder.jenkins.controller">
|
||||
<!-- -->
|
||||
</a>
|
||||
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="使用表, 列表类和解释">
|
||||
<caption><span><a href="../../../../com/educoder/jenkins/controller/package-summary.html">com.educoder.jenkins.controller</a>使用的<a href="../../../../com/educoder/jenkins/controller/package-summary.html">com.educoder.jenkins.controller</a>中的类</span><span class="tabEnd"> </span></caption>
|
||||
<tr>
|
||||
<th class="colOne" scope="col">类和说明</th>
|
||||
</tr>
|
||||
<tbody>
|
||||
<tr class="altColor">
|
||||
<td class="colOne"><a href="../../../../com/educoder/jenkins/controller/class-use/BaseController.html#com.educoder.jenkins.controller">BaseController</a>
|
||||
<div class="block">Created by guange on 26/02/2017.</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../../../../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li class="navBarCell1Rev">使用</li>
|
||||
<li><a href="package-tree.html">树</a></li>
|
||||
<li><a href="../../../../index-files/index-1.html">索引</a></li>
|
||||
<li><a href="../../../../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../../../../index.html?com/educoder/jenkins/controller/package-use.html" target="_top">框架</a></li>
|
||||
<li><a href="package-use.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../../../../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
</body>
|
||||
</html>
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>常量字段值</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>常量字段值</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
</head>
|
||||
|
@ -23,9 +30,105 @@
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="overview-tree.html">树</a></li>
|
||||
<li><a href="index-files/index-1.html">索引</a></li>
|
||||
<li><a href="help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="index.html?constant-values.html" target="_top">框架</a></li>
|
||||
<li><a href="constant-values.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<div class="header">
|
||||
<h1 title="常量字段值" class="title">常量字段值</h1>
|
||||
<h2 title="目录">目录</h2>
|
||||
</div>
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="overview-tree.html">树</a></li>
|
||||
<li><a href="index-files/index-1.html">索引</a></li>
|
||||
<li><a href="help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="index.html?constant-values.html" target="_top">框架</a></li>
|
||||
<li><a href="constant-values.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>API 帮助</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>API 帮助</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
</head>
|
||||
|
@ -23,6 +30,54 @@
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="overview-tree.html">树</a></li>
|
||||
<li><a href="index-files/index-1.html">索引</a></li>
|
||||
<li class="navBarCell1Rev">帮助</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="index.html?help-doc.html" target="_top">框架</a></li>
|
||||
<li><a href="help-doc.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<div class="header">
|
||||
<h1 class="title">此 API 文档的组织方式</h1>
|
||||
<div class="subTitle">此 API (应用程序编程接口) 文档包含对应于导航栏中的项目的页面, 如下所述。</div>
|
||||
|
@ -87,8 +142,21 @@
|
|||
</ul>
|
||||
</li>
|
||||
<li class="blockList">
|
||||
<<<<<<< HEAD
|
||||
<h2>已过时的 API</h2>
|
||||
<p><a href="deprecated-list.html">已过时的 API</a> 页面列出了所有已过时的 API。一般由于进行了改进并且通常提供了替代的 API, 所以建议不要使用已过时的 API。在将来的实现过程中, 可能会删除已过时的 API。</p>
|
||||
=======
|
||||
<h2>使用</h2>
|
||||
<p>每个已文档化的程序包, 类和接口都有各自的“使用”页面。此页面介绍了使用给定类或程序包的任何部分的程序包, 类, 方法, 构造器和字段。对于给定的类或接口 A, 其“使用”页面包含 A 的子类, 声明为 A 的字段, 返回 A 的方法, 以及带有类型为 A 的参数的方法和构造器。访问此页面的方法是: 首先转至程序包, 类或接口, 然后单击导航栏中的 "使用" 链接。</p>
|
||||
</li>
|
||||
<li class="blockList">
|
||||
<h2>树 (类分层结构)</h2>
|
||||
<p>对于所有程序包, 有一个<a href="overview-tree.html">类分层结构</a>页面, 以及每个程序包的分层结构。每个分层结构页面都包含类的列表和接口的列表。从<code>java.lang.Object</code>开始, 按继承结构对类进行排列。接口不从<code>java.lang.Object</code>继承。</p>
|
||||
<ul>
|
||||
<li>查看“概览”页面时, 单击 "树" 将显示所有程序包的分层结构。</li>
|
||||
<li>查看特定程序包, 类或接口页面时, 单击 "树" 将仅显示该程序包的分层结构。</li>
|
||||
</ul>
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</li>
|
||||
<li class="blockList">
|
||||
<h2>索引</h2>
|
||||
|
@ -116,5 +184,53 @@
|
|||
</li>
|
||||
</ul>
|
||||
<span class="emphasizedPhrase">此帮助文件适用于使用标准 doclet 生成的 API 文档。</span></div>
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="overview-tree.html">树</a></li>
|
||||
<li><a href="index-files/index-1.html">索引</a></li>
|
||||
<li class="navBarCell1Rev">帮助</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="index.html?help-doc.html" target="_top">框架</a></li>
|
||||
<li><a href="help-doc.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>C - 索引</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>C - 索引</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../script.js"></script>
|
||||
</head>
|
||||
|
@ -23,7 +30,56 @@
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> <a name="I:C">
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个字母</li>
|
||||
<li><a href="index-2.html">下一个字母</a></li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-1.html" target="_top">框架</a></li>
|
||||
<li><a href="index-1.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a name="I:C">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<!-- -->
|
||||
</a>
|
||||
<h2 class="title">C</h2>
|
||||
|
@ -31,6 +87,55 @@
|
|||
<dt><a href="../com/educoder/jenkins/controller/package-summary.html">com.educoder.jenkins.controller</a> - 程序包 com.educoder.jenkins.controller</dt>
|
||||
<dd> </dd>
|
||||
</dl>
|
||||
<<<<<<< HEAD
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> </div>
|
||||
=======
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> </div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个字母</li>
|
||||
<li><a href="index-2.html">下一个字母</a></li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-1.html" target="_top">框架</a></li>
|
||||
<li><a href="index-1.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>D - 索引</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>D - 索引</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../script.js"></script>
|
||||
</head>
|
||||
|
@ -23,14 +30,116 @@
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> <a name="I:D">
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li><a href="index-1.html">上一个字母</a></li>
|
||||
<li><a href="index-3.html">下一个字母</a></li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-2.html" target="_top">框架</a></li>
|
||||
<li><a href="index-2.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a name="I:D">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<!-- -->
|
||||
</a>
|
||||
<h2 class="title">D</h2>
|
||||
<dl>
|
||||
<dt><span class="memberNameLink"><a href="../com/educoder/jenkins/controller/GameController.html#deleteJob-java.lang.String-">deleteJob(String)</a></span> - 类 中的方法com.educoder.jenkins.controller.<a href="../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">GameController</a></dt>
|
||||
<<<<<<< HEAD
|
||||
<dd> </dd>
|
||||
</dl>
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> </div>
|
||||
=======
|
||||
<dd>
|
||||
<div class="block">根据job名称删除指定job</div>
|
||||
</dd>
|
||||
</dl>
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> </div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li><a href="index-1.html">上一个字母</a></li>
|
||||
<li><a href="index-3.html">下一个字母</a></li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-2.html" target="_top">框架</a></li>
|
||||
<li><a href="index-2.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>G - 索引</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>G - 索引</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../script.js"></script>
|
||||
</head>
|
||||
|
@ -23,12 +30,62 @@
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> <a name="I:G">
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li><a href="index-2.html">上一个字母</a></li>
|
||||
<li><a href="index-4.html">下一个字母</a></li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-3.html" target="_top">框架</a></li>
|
||||
<li><a href="index-3.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a name="I:G">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<!-- -->
|
||||
</a>
|
||||
<h2 class="title">G</h2>
|
||||
<dl>
|
||||
<dt><a href="../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类"><span class="typeNameLink">GameController</span></a> - <a href="../com/educoder/jenkins/controller/package-summary.html">com.educoder.jenkins.controller</a>中的类</dt>
|
||||
<<<<<<< HEAD
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="../com/educoder/jenkins/controller/GameController.html#GameController--">GameController()</a></span> - 类 的构造器com.educoder.jenkins.controller.<a href="../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">GameController</a></dt>
|
||||
<dd> </dd>
|
||||
|
@ -41,5 +98,67 @@
|
|||
</dd>
|
||||
</dl>
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> </div>
|
||||
=======
|
||||
<dd>
|
||||
<div class="block">生成脚本、发布实训、开启实训、写测试用例、删除job</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="../com/educoder/jenkins/controller/GameController.html#GameController--">GameController()</a></span> - 类 的构造器com.educoder.jenkins.controller.<a href="../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">GameController</a></dt>
|
||||
<dd> </dd>
|
||||
<dt><span class="memberNameLink"><a href="../com/educoder/jenkins/controller/GameController.html#generatePipelineScriptForChallenge-java.lang.String-">generatePipelineScriptForChallenge(String)</a></span> - 类 中的方法com.educoder.jenkins.controller.<a href="../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">GameController</a></dt>
|
||||
<dd>
|
||||
<div class="block">逐个生成各个关卡的pipeline。</div>
|
||||
</dd>
|
||||
<dt><span class="memberNameLink"><a href="../com/educoder/jenkins/controller/GameController.html#generatePipelineScriptForGame-java.lang.String-">generatePipelineScriptForGame(String)</a></span> - 类 中的方法com.educoder.jenkins.controller.<a href="../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">GameController</a></dt>
|
||||
<dd>
|
||||
<div class="block">生成整个实训的pipeline<br></div>
|
||||
</dd>
|
||||
</dl>
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> </div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li><a href="index-2.html">上一个字母</a></li>
|
||||
<li><a href="index-4.html">下一个字母</a></li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-3.html" target="_top">框架</a></li>
|
||||
<li><a href="index-3.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>O - 索引</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>O - 索引</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../script.js"></script>
|
||||
</head>
|
||||
|
@ -23,7 +30,56 @@
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> <a name="I:O">
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li><a href="index-3.html">上一个字母</a></li>
|
||||
<li><a href="index-5.html">下一个字母</a></li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-4.html" target="_top">框架</a></li>
|
||||
<li><a href="index-4.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a name="I:O">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<!-- -->
|
||||
</a>
|
||||
<h2 class="title">O</h2>
|
||||
|
@ -31,6 +87,55 @@
|
|||
<dt><span class="memberNameLink"><a href="../com/educoder/jenkins/controller/GameController.html#openGameInstance-java.lang.String-java.lang.String-java.lang.String-">openGameInstance(String, String, String)</a></span> - 类 中的方法com.educoder.jenkins.controller.<a href="../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">GameController</a></dt>
|
||||
<dd> </dd>
|
||||
</dl>
|
||||
<<<<<<< HEAD
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> </div>
|
||||
=======
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> </div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li><a href="index-3.html">上一个字母</a></li>
|
||||
<li><a href="index-5.html">下一个字母</a></li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-4.html" target="_top">框架</a></li>
|
||||
<li><a href="index-4.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,10 +2,17 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>P - 索引</title>
|
||||
<meta name="date" content="2017-06-19">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>P - 索引</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="../script.js"></script>
|
||||
</head>
|
||||
|
@ -23,14 +30,116 @@
|
|||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<<<<<<< HEAD
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> <a name="I:P">
|
||||
=======
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li><a href="index-4.html">上一个字母</a></li>
|
||||
<li>下一个字母</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-5.html" target="_top">框架</a></li>
|
||||
<li><a href="index-5.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="contentContainer"><a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a name="I:P">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<!-- -->
|
||||
</a>
|
||||
<h2 class="title">P</h2>
|
||||
<dl>
|
||||
<dt><span class="memberNameLink"><a href="../com/educoder/jenkins/controller/GameController.html#publishGame-java.lang.String-">publishGame(String)</a></span> - 类 中的方法com.educoder.jenkins.controller.<a href="../com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类">GameController</a></dt>
|
||||
<<<<<<< HEAD
|
||||
<dd> </dd>
|
||||
</dl>
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> <a href="index-6.html">T</a> </div>
|
||||
=======
|
||||
<dd>
|
||||
<div class="block">发布实训并将测试用例写入服务器的文件中.</div>
|
||||
</dd>
|
||||
</dl>
|
||||
<a href="index-1.html">C</a> <a href="index-2.html">D</a> <a href="index-3.html">G</a> <a href="index-4.html">O</a> <a href="index-5.html">P</a> </div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="../com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li><a href="../overview-tree.html">树</a></li>
|
||||
<li class="navBarCell1Rev">索引</li>
|
||||
<li><a href="../help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li><a href="index-4.html">上一个字母</a></li>
|
||||
<li>下一个字母</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="../index.html?index-files/index-5.html" target="_top">框架</a></li>
|
||||
<li><a href="index-5.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="../allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,8 +2,13 @@
|
|||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<<<<<<< HEAD
|
||||
<!-- Generated by javadoc (1.8.0_31) on Mon Jun 19 23:12:32 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
=======
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
<title>生成的文档 (无标题)</title>
|
||||
<script type="text/javascript">
|
||||
targetPage = "" + window.location.search;
|
||||
|
|
|
@ -0,0 +1,138 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!-- NewPage -->
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<!-- Generated by javadoc (1.8.0_101) on Tue Jun 20 15:47:35 CST 2017 -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>类分层结构</title>
|
||||
<meta name="date" content="2017-06-20">
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript"><!--
|
||||
try {
|
||||
if (location.href.indexOf('is-external=true') == -1) {
|
||||
parent.document.title="\u7C7B\u5206\u5C42\u7ED3\u6784";
|
||||
}
|
||||
}
|
||||
catch(err) {
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
<noscript>
|
||||
<div>您的浏览器已禁用 JavaScript。</div>
|
||||
</noscript>
|
||||
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||
<div class="topNav"><a name="navbar.top">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.top.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li class="navBarCell1Rev">树</li>
|
||||
<li><a href="index-files/index-1.html">索引</a></li>
|
||||
<li><a href="help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="index.html?overview-tree.html" target="_top">框架</a></li>
|
||||
<li><a href="overview-tree.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_top">
|
||||
<li><a href="allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.top">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||
<div class="header">
|
||||
<h1 class="title">所有程序包的分层结构</h1>
|
||||
<span class="packageHierarchyLabel">程序包分层结构:</span>
|
||||
<ul class="horizontal">
|
||||
<li><a href="com/educoder/jenkins/controller/package-tree.html">com.educoder.jenkins.controller</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="contentContainer">
|
||||
<h2 title="类分层结构">类分层结构</h2>
|
||||
<ul>
|
||||
<li type="circle">java.lang.Object
|
||||
<ul>
|
||||
<li type="circle">com.educoder.jenkins.controller.BaseController
|
||||
<ul>
|
||||
<li type="circle">com.educoder.jenkins.controller.<a href="com/educoder/jenkins/controller/GameController.html" title="com.educoder.jenkins.controller中的类"><span class="typeNameLink">GameController</span></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||
<div class="bottomNav"><a name="navbar.bottom">
|
||||
<!-- -->
|
||||
</a>
|
||||
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
|
||||
<a name="navbar.bottom.firstrow">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="navList" title="导航">
|
||||
<li><a href="com/educoder/jenkins/controller/package-summary.html">程序包</a></li>
|
||||
<li>类</li>
|
||||
<li>使用</li>
|
||||
<li class="navBarCell1Rev">树</li>
|
||||
<li><a href="index-files/index-1.html">索引</a></li>
|
||||
<li><a href="help-doc.html">帮助</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="subNav">
|
||||
<ul class="navList">
|
||||
<li>上一个</li>
|
||||
<li>下一个</li>
|
||||
</ul>
|
||||
<ul class="navList">
|
||||
<li><a href="index.html?overview-tree.html" target="_top">框架</a></li>
|
||||
<li><a href="overview-tree.html" target="_top">无框架</a></li>
|
||||
</ul>
|
||||
<ul class="navList" id="allclasses_navbar_bottom">
|
||||
<li><a href="allclasses-noframe.html">所有类</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<script type="text/javascript"><!--
|
||||
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||
if(window==top) {
|
||||
allClassesLink.style.display = "block";
|
||||
}
|
||||
else {
|
||||
allClassesLink.style.display = "none";
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</div>
|
||||
<a name="skip.navbar.bottom">
|
||||
<!-- -->
|
||||
</a></div>
|
||||
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||
</body>
|
||||
</html>
|
|
@ -463,7 +463,10 @@ Table styles
|
|||
.useSummary td, .constantsSummary td, .deprecatedSummary td {
|
||||
text-align:left;
|
||||
padding:0px 0px 12px 10px;
|
||||
<<<<<<< HEAD
|
||||
width:100%;
|
||||
=======
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
}
|
||||
th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
|
||||
td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
|
||||
|
@ -488,6 +491,10 @@ td.colOne, th.colOne {
|
|||
font-size:13px;
|
||||
}
|
||||
.overviewSummary td.colFirst, .overviewSummary th.colFirst,
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
.useSummary td.colFirst, .useSummary th.colFirst,
|
||||
>>>>>>> 12fb6f47c902505f46da98021b603f449b739e4f
|
||||
.overviewSummary td.colOne, .overviewSummary th.colOne,
|
||||
.memberSummary td.colFirst, .memberSummary th.colFirst,
|
||||
.memberSummary td.colOne, .memberSummary th.colOne,
|
||||
|
|
|
@ -69,7 +69,7 @@ public class JenkinsApi {
|
|||
return jenkins.createJob(jobName, xml);
|
||||
} catch (IOException e) {
|
||||
// TODO: handle exception
|
||||
throw new ExceptionOfJobNoExist("job 已经存在",e.getCause());
|
||||
throw new ExceptionOfJobNoExist("job 创建不成功",e.getCause());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,8 +77,9 @@ public class JenkinsApi {
|
|||
public void updateJob(String jobName, String pipeLine, Map<String, String> params) throws IOException {
|
||||
//首先得对pipeline转义
|
||||
Job job=jenkins.getJobs().get(jobName);
|
||||
if(job == null) return;
|
||||
String xml = makeJobXml(pipeLine, params);
|
||||
jenkins.updateJob(jobName, xml);
|
||||
jenkins.updateJob(jobName, xml,false);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -97,14 +98,14 @@ public class JenkinsApi {
|
|||
return 0;
|
||||
}catch (Exception e)
|
||||
{
|
||||
logger.error("delete job failed while job exists");
|
||||
logger.error("delete job :" + jobName + " failed while job exists");
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.info("job does not exists");
|
||||
logger.info("job :" + jobName + " does not exists");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,8 +27,8 @@ import io.swagger.annotations.ApiOperation;
|
|||
import io.swagger.annotations.ApiParam;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
|
||||
import com.educoder.jenkins.Exceptions.ExceptionOfEnvironmentNotExist;
|
||||
import com.educoder.jenkins.model.*;
|
||||
/**
|
||||
* @author lqk
|
||||
* @version 0.1
|
||||
|
@ -54,155 +54,156 @@ public class GameController extends BaseController {
|
|||
|
||||
private final static Logger logger = LoggerFactory.getLogger(GameController.class);
|
||||
|
||||
@RequestMapping(path = "/test")
|
||||
public void test() {
|
||||
|
||||
logger.debug(pipeLineConfig.getEnvironment().get(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param gameInfo:实训信息 <p>发布实训,存储测试用例到服务器 </p>
|
||||
* @return 返回一个存储是否成功code和msg
|
||||
*
|
||||
* 发布实训并将测试用例写入服务器的文件中.<br>并监控写测试用例的结果,等其出错时返回指定信息给trustie<br>
|
||||
*@param gameInfo:实训的各种配置信息
|
||||
* <p>gameInfo的格式如下:
|
||||
* gameInfo:{"gameID":"123","operationEnvironment": "Python",
|
||||
* "challengeInfo":[{"challengeStage":"1","challengeType":1,"challengeProgramName":"hello.py","operationEnvironment":"Python","trainingID":"1"}],
|
||||
* "testCases":[{"challengeStage":"1","challengeTestCases":[{"caseId":"35","input":"1","output":"1","isPublic":"1"}]}]
|
||||
* }
|
||||
* challengeStage:当前关卡<br>
|
||||
* operationEnvironment:运行环境<br>
|
||||
* challengeProgramName:执行文件<br>
|
||||
* trainingID:对应每一实训的唯一ID<br>
|
||||
* testCases:包含测试集输入输出信息的JSON数组
|
||||
* @return 写测试用例是否成功。code:0 写入成功;-1 写入失败
|
||||
* @throws URISyntaxException
|
||||
* @throws IOException
|
||||
*
|
||||
* @see #generateTestCasesForGame
|
||||
*/
|
||||
@RequestMapping(path = "/publishGame")
|
||||
@ApiOperation(value = "发布实训", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
||||
public JSONObject publishGame(
|
||||
@ApiParam(name = "gameInfo", required = true, value = "游戏信息") @RequestParam String gameInfo)
|
||||
public JSONObject publishGame(@ApiParam(name = "gameInfo", required = true, value = "游戏信息") @RequestParam String gameInfo)
|
||||
throws Exception {
|
||||
logger.debug(gameInfo);
|
||||
logger.debug("/game/publishGame/" + gameInfo);
|
||||
|
||||
|
||||
JSONObject response = new JSONObject();
|
||||
/**
|
||||
* 不需要生成脚本,脚本不存储在trusite,每次需要的时候重新生成
|
||||
*/
|
||||
// 将前端以JSON传送过来的各个关卡的信息以及其他设置,和java.template.pipeline拼装成整个游戏的脚本
|
||||
// response = generatePipelineScriptForGame(gameInfo);
|
||||
|
||||
|
||||
// 将字符串转换为JSON对象
|
||||
|
||||
// 将字符串解码后转换为JSON对象
|
||||
gameInfo=Base64Helper.replaceDecode(gameInfo);
|
||||
JSONObject info = JSONObject.parseObject(gameInfo);
|
||||
|
||||
// 将测试用例写入工作目录下的文件中
|
||||
Key_Value result = generateTestCasesForGame(info.getString("trainingID"),
|
||||
JSONArray.toJSONString(info.getJSONArray("testCases")));
|
||||
|
||||
response.put("code", result.getCode());
|
||||
response.put("msg", result.getMsg());
|
||||
logger.debug(response.toJSONString());
|
||||
logger.debug("/game/publishGame/: response:" + response.toJSONString());
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 逐个生成各个关卡的pipeline。
|
||||
* @param challengeInfo 各个关卡的信息
|
||||
* @return 各个关卡的pipeline的组合
|
||||
* @throws Exception
|
||||
* <p>challengeInfo的格式请参考{@link publishGame}中的参数介绍
|
||||
*/
|
||||
public String generatePipelineScriptForChallenge(String challengeInfo) throws Exception {
|
||||
logger.debug("challengeInfo:" + challengeInfo);
|
||||
|
||||
JSONArray challenge = JSONObject.parseArray(challengeInfo);
|
||||
String channgePipeline = "";
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
|
||||
//循环生成各个关卡的pipeline
|
||||
for(int i = 0; i < challenge.size(); i++)
|
||||
{
|
||||
String pipeline="";
|
||||
JSONObject stageInfo = challenge.getJSONObject(i);
|
||||
//第几关
|
||||
String challengeStage = stageInfo.getString("challengeStage");
|
||||
// challengeType:评测方式(输入输出)
|
||||
String challengeType = stageInfo.getString("challengeType");
|
||||
// 文件路径(前台默认打开、供用户编辑的的文件,后续要把名称区别名称)
|
||||
String challengeProgramName = stageInfo.getString("challengeProgramName");
|
||||
//运行环境
|
||||
String operationEnvironment = stageInfo.getString("operationEnvironment");
|
||||
// 前端生成的实训Id
|
||||
String trainingID = stageInfo.getString("trainingID");
|
||||
|
||||
/*
|
||||
* 利用spring的反射机理,对应pipelineconfig类配置了一个链表。配置文件中对应某一实
|
||||
* 训的各种配置是一一对应的,因此需要根据运行环境去判断其对应的配置
|
||||
*/
|
||||
int index = pipeLineConfig.getEnvironment().indexOf(operationEnvironment);
|
||||
if (index == -1) {
|
||||
throw new ExceptionOfEnvironmentNotExist("环境不存在");
|
||||
}
|
||||
params.put("challengeType", challengeType);
|
||||
params.put("challengeStage", challengeStage);
|
||||
params.put("challengeProgramName", challengeProgramName);
|
||||
params.put("operationEnvironment", operationEnvironment);
|
||||
params.put("trainingID", trainingID);
|
||||
params.put("complieCommand", pipeLineConfig.getComplieCommand().get(index));
|
||||
params.put("executeCommand", pipeLineConfig.getExecuteCommand().get(index));
|
||||
params.put("challengeTemplateFileName", pipeLineConfig.getChallengeTemplateFileName().get(index));
|
||||
params.put("replaceExecuteCommand", pipeLineConfig.getReplaceExecuteCommand().get(index));
|
||||
|
||||
GeneratePipeline generatePipeline = (GeneratePipeline) Class.forName(pipeLineConfig.getClassName().get(index)).newInstance();
|
||||
|
||||
public String generatePipelineScriptForChallenge(
|
||||
@ApiParam(name = "challengeInfo", required = true, value = "关卡信息") @RequestParam String challengeInfo)
|
||||
throws Exception {
|
||||
logger.debug(challengeInfo);
|
||||
pipeline = generatePipeline.generateChallengePipeline(params);
|
||||
channgePipeline = channgePipeline + System.getProperty("line.separator") + pipeline;
|
||||
|
||||
//
|
||||
// Map<String, String> params = new HashMap<String, String>();
|
||||
//
|
||||
//
|
||||
// // 提取trustie传递来的信息
|
||||
// // 解析JSON字符串
|
||||
//
|
||||
// // challengeStage:第几关
|
||||
// String challengeStage = challengeInfo.get("challengeStage");
|
||||
// // challengeType:评测方式(输入输出)
|
||||
// String challengeType = challengeInfo.get("challengeType");
|
||||
// // 文件路径(前台默认打开、供用户编辑的的文件,后续要把名称区别名称)
|
||||
// String challengeProgramName = challengeInfo.get("challengeProgramName");
|
||||
// String operationEnvironment = challengeInfo.get("operationEnvironment");
|
||||
// // 前端生成的实训Id
|
||||
// String trainingID = challengeInfo.get("trainingID");
|
||||
//
|
||||
// String pipeline = "";
|
||||
// int index = pipeLineConfig.getEnvironment().indexOf(operationEnvironment);
|
||||
// if (index == -1) {
|
||||
// throw new ExceptionOfEnvironmentNotExist("环境不存在");
|
||||
// }
|
||||
//
|
||||
// params.put("challengeType", challengeType);
|
||||
// params.put("challengeStage", challengeStage);
|
||||
// params.put("challengeProgramName", challengeProgramName);
|
||||
// params.put("operationEnvironment", operationEnvironment);
|
||||
// params.put("trainingID", trainingID);
|
||||
// params.put("complieCommand", pipeLineConfig.getComplieCommand().get(index));
|
||||
// params.put("executeCommand", pipeLineConfig.getExecuteCommand().get(index));
|
||||
// params.put("challengeTemplateFileName", pipeLineConfig.getChallengeTemplateFileName().get(index));
|
||||
// params.put("replaceExecuteCommand", pipeLineConfig.getReplaceExecuteCommand().get(index));
|
||||
//
|
||||
// GeneratePipeline generatePipeline = (GeneratePipeline) Class.forName(pipeLineConfig.getClassName().get(index))
|
||||
// .newInstance();
|
||||
//
|
||||
// pipeline = generatePipeline.generateChallengePipeline(params);
|
||||
//
|
||||
//
|
||||
// response.put("code", 0);
|
||||
// response.put("msg", Base64Helper.encode(pipeline));
|
||||
|
||||
|
||||
// logger.debug(pipeline);
|
||||
return "";
|
||||
}
|
||||
return channgePipeline;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* trustie将各个关卡的pipeline连同运行环境,以JSON格式传给中间层服务器
|
||||
* 中间层服务器接收参数,并将其和java.template.pipeline这一模板进行组成, 生成整个Job的总脚本。 gameInfo
|
||||
*
|
||||
* @param gameInfo
|
||||
* 生成整个实训的pipeline<br>
|
||||
* @param gameInfo 实训的各种配置信息
|
||||
* @return
|
||||
|
||||
* @throws ExceptionOfEnvironmentNotExist
|
||||
* @throws ClassCastException
|
||||
* <p>gameInfo的具体格式请参见{@link publishGame}
|
||||
*/
|
||||
public String generatePipelineScriptForGame(@ApiParam(name = "gameInfo", required = true, value = "游戏信息,脚本用base64编码") @RequestParam String gameInfo)
|
||||
{
|
||||
//
|
||||
// logger.debug(gameInfo);
|
||||
//
|
||||
// JSONObject response = new JSONObject();
|
||||
//
|
||||
// // 提取trustie传递来的信息
|
||||
// JSONObject info = JSONObject.parseObject(gameInfo);
|
||||
//
|
||||
// // operationEnvironment 代表运行环境
|
||||
// String operationEnvironment = info.getString("operationEnvironment");
|
||||
//
|
||||
// JSONArray challengePipelines = info.getJSONArray("challengePipelines");
|
||||
//
|
||||
// int index = pipeLineConfig.getEnvironment().indexOf(operationEnvironment);
|
||||
// if (index == -1) {
|
||||
// throw new ExceptionOfEnvironmentNotExist("环境不存在");
|
||||
// }
|
||||
//
|
||||
// StringBuffer challengePipeline = new StringBuffer();
|
||||
// for (int i = 0; i < challengePipelines.size(); i++) {
|
||||
// challengePipeline
|
||||
// .append(Base64Helper.decode((challengePipelines.getJSONObject(i)).getString("challengePipeline")));
|
||||
// challengePipeline.append("\n\t\t");
|
||||
// }
|
||||
//
|
||||
// Map<String, String> params = new HashMap<String, String>();
|
||||
//
|
||||
// params.put("operationEnvironment", operationEnvironment);
|
||||
// params.put("challengePipeline", new String(challengePipeline));
|
||||
// params.put("pipelineTemplateFileName", pipeLineConfig.getPipelineTemplateFileName().get(index));
|
||||
// params.put("podTemplate", pipeLineConfig.getPodTemplate().get(index));
|
||||
// params.put("mainContainer", pipeLineConfig.getMainContainer().get(index));
|
||||
// // 根据运行环境分别得到对应的编译和执行命令
|
||||
// GeneratePipeline generatePipeline = (GeneratePipeline) Class.forName(pipeLineConfig.getClassName().get(index))
|
||||
// .newInstance();
|
||||
//
|
||||
// String pipeline = generatePipeline.generateFullPipeline(params);
|
||||
//
|
||||
// response.put("code", 0);
|
||||
// response.put("msg", Base64Helper.encode(pipeline));
|
||||
//
|
||||
// logger.debug(response.toJSONString());
|
||||
return "";
|
||||
public String generatePipelineScriptForGame(String gameInfo) throws ExceptionOfEnvironmentNotExist,ClassCastException
|
||||
{
|
||||
logger.debug("");
|
||||
JSONObject game = JSONObject.parseObject(gameInfo);
|
||||
String operationEnvironment = game.getString("operationEnvironment");
|
||||
JSONArray challengeInfo = game.getJSONArray("challengeInfo");
|
||||
int index = pipeLineConfig.getEnvironment().indexOf(operationEnvironment);
|
||||
logger.debug("获取到运行环境、关卡信息");
|
||||
if (index == -1) {
|
||||
throw new ExceptionOfEnvironmentNotExist("环境不存在");
|
||||
}
|
||||
|
||||
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
String challengePipeline = "";
|
||||
try {
|
||||
logger.debug("即将生成关卡pipeline");
|
||||
challengePipeline = generatePipelineScriptForChallenge(JSONArray.toJSONString(challengeInfo));
|
||||
logger.debug("已经生成关卡的pipeline");
|
||||
}catch(Exception e)
|
||||
{
|
||||
logger.debug("生成每个关卡的pipeline时报错");
|
||||
}
|
||||
params.put("operationEnvironment", operationEnvironment);
|
||||
params.put("challengePipeline", new String(challengePipeline));
|
||||
params.put("pipelineTemplateFileName", pipeLineConfig.getPipelineTemplateFileName().get(index));
|
||||
params.put("podTemplate",pipeLineConfig.getPodTemplate().get(index));
|
||||
params.put("mainContainer",pipeLineConfig.getMainContainer().get(index));
|
||||
String pipeline = "";
|
||||
try {
|
||||
GeneratePipeline generatePipeline = (GeneratePipeline) Class.forName(pipeLineConfig.getClassName().get(index)).newInstance();
|
||||
pipeline = generatePipeline.generateFullPipeline(params);
|
||||
}catch(ClassNotFoundException e)
|
||||
{
|
||||
logger.debug("找不到生成pipeline所需要的类");
|
||||
}catch(Exception ex)
|
||||
{
|
||||
logger.debug("生成总体脚本时出错");
|
||||
}
|
||||
|
||||
return pipeline;
|
||||
}
|
||||
|
||||
// gamePipelineScript为前端为传回来的pipeline(前端保存每一个关卡的pipeline及总的pipeline)
|
||||
|
@ -213,9 +214,8 @@ public class GameController extends BaseController {
|
|||
@ApiParam(name = "gameInfo", required = true, value = "游戏信息") @RequestParam String gameInfo,
|
||||
@ApiParam(name = "instanceGitURL", required = true, value = "job的gitUrl") @RequestParam String instanceGitURL) throws Exception
|
||||
{
|
||||
logger.debug(jobNameForInstance + "\t" + gameInfo + "\t" + instanceGitURL);
|
||||
|
||||
// 替换PODLABEL为唯一值
|
||||
logger.debug("jobName:\t" + jobNameForInstance + "\t" + "gameInfo:" + gameInfo + "\t" + "instanceGitURl: " + instanceGitURL);
|
||||
|
||||
String gamePipelineScript=generatePipelineScriptForGame(gameInfo);
|
||||
|
||||
|
||||
|
@ -230,6 +230,8 @@ public class GameController extends BaseController {
|
|||
|
||||
/**
|
||||
* 创建Job写测试用例到worksspace的指定目录下
|
||||
* 在写入新的测试用例之前需要先把之前写入的测试文件给删除,这是为了防止
|
||||
* 旧的测试用例对新的测试用例产生影响
|
||||
*
|
||||
* @param trainingID
|
||||
* 实训ID
|
||||
|
@ -260,40 +262,51 @@ public class GameController extends BaseController {
|
|||
/**
|
||||
* 解析参数,创建job
|
||||
*/
|
||||
|
||||
JSONArray cases = JSONObject.parseArray(testCases);
|
||||
StringBuffer pipeline = new StringBuffer("");
|
||||
pipeline.append("node(){\n" + "sh script:'rm -rf ../testCases/" + trainingID + "/*'" + "\r\n");
|
||||
JSONArray cases = JSONObject.parseArray(testCases);
|
||||
|
||||
for (int i = 0; i < cases.size(); i++) {
|
||||
// 获取每个关卡的信息
|
||||
JSONObject challenge = cases.getJSONObject(i);
|
||||
|
||||
String challengeStage = challenge.getString("challengeStage");
|
||||
JSONArray challengeTestCases = challenge.getJSONArray("challengeTestCases");
|
||||
|
||||
// 获取所有的测试用例
|
||||
for (int j = 1; j <= challengeTestCases.size(); j++) {
|
||||
JSONObject testCase = challengeTestCases.getJSONObject(j);
|
||||
for (int j = 1; j <= challengeTestCases.size(); j++) {
|
||||
JSONObject testCase = challengeTestCases.getJSONObject(j-1);
|
||||
|
||||
String input = testCase.getString("input");
|
||||
String output = testCase.getString("output");
|
||||
String isPublic = testCase.getString("isPublic");
|
||||
|
||||
// 需要注意转义字符,pipeline中类似java,有些字符需要转义,如"和'
|
||||
/*
|
||||
* 需要注意转义字符,pipeline中类似java,有些字符需要转义,如"和'
|
||||
* 而且在写测试集到文件之前需要先删除之前存在的
|
||||
*/
|
||||
String challengePipeline = "writeFile file: '../testCases/" + trainingID + "/" + challengeStage + "/"
|
||||
+ j + ".in, text: "
|
||||
+ input.toString().replace("\r\n", "\n").replace("\"", "\\\"").replace("\'", "\\\'") + "\n"
|
||||
+ j + ".in', text: '"
|
||||
+ input.toString().replace("\r\n", "\\n").replace("\"", "\\\"").replace("\'", "\\\'") +"'" + "\n"
|
||||
+ "writeFile file: '../testCases/" + trainingID + "/" + challengeStage + "/" + j
|
||||
+ ".out', text: '"
|
||||
+ output.toString().replace("\r\n", "\\n").replace("\"", "\\\"").replace("\'", "\\\'")+ "'" + "\n"
|
||||
+ "writeFile file: '../testCases/" + trainingID + "/" + challengeStage + "/" + j
|
||||
+ ".out, text: "
|
||||
+ output.toString().replace("\r\n", "\n").replace("\"", "\\\"").replace("\'", "\\\'") + "\n"
|
||||
+ "writeFile file: '../testCases/" + trainingID + "/" + challengeStage + "/" + j
|
||||
+ ".isPublic, text: "
|
||||
+ isPublic.toString().replace("\r\n", "\n").replace("\"", "\\\"").replace("\'", "\\\'") + "\n";
|
||||
+ ".isPublic', text: '"
|
||||
+ isPublic.toString().replace("\r\n", "\\n").replace("\"", "\\\"").replace("\'", "\\\'") +"'"+ "\n";
|
||||
pipeline.append(challengePipeline);
|
||||
|
||||
}
|
||||
}
|
||||
jenkinsApi.createJob(jobName, pipeline.toString(), params);
|
||||
pipeline.append("}");
|
||||
// logger.debug("pipeline:" + pipeline.toString());
|
||||
JobWithDetails job = server.getJob(jobName);
|
||||
if(job!=null)
|
||||
{
|
||||
jenkinsApi.updateJob(jobName, pipeline.toString(), params);
|
||||
}else {
|
||||
jenkinsApi.createJob(jobName, pipeline.toString(), params);
|
||||
|
||||
}
|
||||
job = server.getJob(jobName);
|
||||
job.build(params);
|
||||
|
||||
/**
|
||||
|
@ -302,7 +315,7 @@ public class GameController extends BaseController {
|
|||
BuildWithDetails buildWithDetails = null;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
try {
|
||||
Thread.sleep(500);
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
|
@ -339,16 +352,17 @@ public class GameController extends BaseController {
|
|||
result = new Key_Value(-1, buildWithDetails.getConsoleOutputText());
|
||||
}
|
||||
|
||||
// todo:构建完成之后删除job
|
||||
server.deleteJob(jobName);
|
||||
// todo:构建完成之后删除job,每次开始时候,判断是否存在,存在则更新,不存在创建,所以不需要删除
|
||||
// server.deleteJob(jobName);
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* @param jobName:要删除的job
|
||||
* @return: 0 删除成功
|
||||
* -1 删除失败
|
||||
* */
|
||||
|
||||
/**
|
||||
* 根据job名称删除指定job
|
||||
* @param jobName 需要删除的job名称
|
||||
* @return -1 删除失败;0 删除成功
|
||||
* @throws IOException
|
||||
*/
|
||||
@ApiOperation(value = "删除Job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
||||
@RequestMapping(path = "/deleteJob")
|
||||
public JSONObject deleteJob(
|
||||
|
@ -368,12 +382,10 @@ public class GameController extends BaseController {
|
|||
* */
|
||||
if (-1 == result) {
|
||||
response.put("code", -1);
|
||||
return response;
|
||||
}
|
||||
|
||||
if (1 == result || 0 == result) {
|
||||
response.put("code", 0);
|
||||
return response;
|
||||
}
|
||||
logger.debug(response.toJSONString());
|
||||
return response;
|
||||
|
|
|
@ -29,9 +29,10 @@ import java.util.HashMap;
|
|||
import java.util.Map;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Created by guange on 18/02/2017.
|
||||
* 创建job、更新job、获取等待时间、构建job
|
||||
* @author 李乾坤
|
||||
*
|
||||
*/
|
||||
@Api(value = "Jenkins控制器", hidden = true)
|
||||
@RestController
|
||||
|
@ -41,7 +42,8 @@ public class JenkinsController extends BaseController {
|
|||
JenkinsApi jenkinsApi;
|
||||
@Autowired
|
||||
AppConfig appConfig;
|
||||
|
||||
@Autowired
|
||||
GameController gameController;
|
||||
BuildThread buildThreadNew;
|
||||
private final static Map<String, String> jobMap = new HashMap<String, String>() {
|
||||
{
|
||||
|
@ -56,7 +58,10 @@ public class JenkinsController extends BaseController {
|
|||
private static final Logger logger = LoggerFactory.getLogger(JenkinsController.class);
|
||||
|
||||
/**
|
||||
* 0:job存在并成功删除 -1;job存在未成功删除 1;job 不存在却尝试去删除 2:其他未知原因导致删除失败
|
||||
* 删除指定job
|
||||
* @param jobNameToDelete 需要删除的job
|
||||
* @return 0:job存在并成功删除 -1;job存在未成功删除 1;job 不存在却尝试去删除 2:其他未知原因导致删除失败
|
||||
* @throws Exception
|
||||
*/
|
||||
@ApiOperation(value = "删除一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
||||
@ApiResponse(code = 200, message = "success", response = JSONObject.class)
|
||||
|
@ -81,6 +86,14 @@ public class JenkinsController extends BaseController {
|
|||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建一个job
|
||||
* @param jobNameForInstance job的名称
|
||||
* @param gamePipelineScript job的pipeline
|
||||
* @return {code,msg} 创建成功:{0,"create job success."}
|
||||
* 创建失败:exception,返回给前端
|
||||
* @throws IOException
|
||||
*/
|
||||
@ApiOperation(value = "创建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
||||
@ApiResponse(code = 200, message = "success", response = JSONObject.class)
|
||||
@RequestMapping(path = "/createJobForInstance", method = RequestMethod.POST)
|
||||
|
@ -90,8 +103,6 @@ public class JenkinsController extends BaseController {
|
|||
throws IOException {
|
||||
|
||||
JSONObject response = new JSONObject();
|
||||
/* long threadCount = ((ThreadPoolExecutor)pool).getTaskCount();
|
||||
BlockingQueue bq = ((ThreadPoolExecutor)pool).getQueue();*/
|
||||
|
||||
Map<String, String> jobParamsMap = jobMap;
|
||||
gamePipelineScript = Base64Helper.decode(gamePipelineScript);
|
||||
|
@ -109,7 +120,20 @@ public class JenkinsController extends BaseController {
|
|||
logger.debug(response.toJSONString());
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建job
|
||||
* @param jobNameForInstance job的名称
|
||||
* @param instanceGitURL base64编码的git地址
|
||||
* @param buildID 此次构建的id
|
||||
* @param instanceChallenge 当前关卡
|
||||
* @param resubmit 是否是评测完成后再次构建
|
||||
* @param gameInfo 关卡信息,用于需要更新pipeline的job.其详细可以参考{@link com.educoder.jenkins.controller.publishGame}
|
||||
* @param modifyStatus 用以标记当前job是否需要更新。1:需要更新job的pipeline;0:不需要更新job的pipeline
|
||||
* @return {code,msg} 创建成功:{"0","run job success."}
|
||||
* 创建失败:exception,前端直接捕获
|
||||
* @throws IOException
|
||||
*/
|
||||
@ApiOperation(value = "构建一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
||||
@RequestMapping(path = "/buildJobForInstance", method = RequestMethod.POST)
|
||||
public JSONObject buildJobForInstance(
|
||||
|
@ -128,11 +152,14 @@ public class JenkinsController extends BaseController {
|
|||
pool = new ThreadPoolExecutor(Integer.parseInt(appConfig.getPoolSize()),
|
||||
Integer.parseInt(appConfig.getPoolSize()), 60L, TimeUnit.SECONDS, buildBlockingQueue);
|
||||
}
|
||||
String newPipeline = new GameController().generatePipelineScriptForGame(gameInfo);
|
||||
updateJobForInstance(jobNameForInstance, newPipeline);
|
||||
if("1".equals(modifyStatus)){
|
||||
String newPipeline = gameController.generatePipelineScriptForGame(gameInfo);
|
||||
newPipeline = newPipeline.replace("PODLABEL", jobNameForInstance);
|
||||
updateJobForInstance(jobNameForInstance, newPipeline);
|
||||
}
|
||||
instanceGitURL = Base64Helper.decode(instanceGitURL);
|
||||
|
||||
// 为新来的job生成一个线程
|
||||
// 为新来的job生成一个线程,将线程放入线程池去执行
|
||||
buildThreadNew = (BuildThread) BeanFactory.getObejct("BuildThread");
|
||||
Map<String, String> buildParams = new HashMap<String, String>();
|
||||
buildParams.put("buildID", buildID);
|
||||
|
@ -151,12 +178,14 @@ public class JenkinsController extends BaseController {
|
|||
return response;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "更新一个job", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
||||
@ApiResponse(code = 200, message = "success", response = JSONObject.class)
|
||||
@RequestMapping(path = "/updateJobForInstance", method = RequestMethod.POST)
|
||||
public JSONObject updateJobForInstance(
|
||||
@ApiParam(name = "jobNameForInstance", required = true, value = "job的名字") @RequestParam String jobNameForInstance,
|
||||
@ApiParam(name = "gamePipelineScript", required = true, value = "pipeLine脚本,用base64编码") @RequestParam String gamePipelineScript)
|
||||
/**
|
||||
* 根据job名称、pipeline及参数信息去更新一个job
|
||||
* @param jobNameForInstance job的名称
|
||||
* @param gamePipelineScript job的pipeline
|
||||
* @return {code,msg} 更新成功:{"0","update job success"};更新失败:抛出异常,前端捕获
|
||||
* @throws IOException
|
||||
*/
|
||||
public JSONObject updateJobForInstance(String jobNameForInstance,String gamePipelineScript)
|
||||
throws IOException {
|
||||
logger.debug("/api/updateJobForInstance: jobNameForInstance:" + jobNameForInstance + ", gamePipelineScript:"
|
||||
+ gamePipelineScript);
|
||||
|
@ -164,7 +193,6 @@ public class JenkinsController extends BaseController {
|
|||
|
||||
Map<String, String> jobParamsMap = jobMap;
|
||||
|
||||
gamePipelineScript = Base64Helper.decode(gamePipelineScript);
|
||||
jenkinsApi.updateJob(jobNameForInstance, gamePipelineScript, jobParamsMap);
|
||||
|
||||
response.put("code", 0);
|
||||
|
@ -174,6 +202,12 @@ public class JenkinsController extends BaseController {
|
|||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前是将所有的构建请求放到一个线程池中,当构建请求数量大于线程池大小时,接下来的构建请求就会被放入等待队列中<br>
|
||||
* 此函数用于更具构建的id来获取某次构建请求前面还有多少job在等待构建。
|
||||
* @param buildID 构建的id
|
||||
* @return {code,msg} 成功获取:{"0",index};获取失败:{"0","-1"}
|
||||
*/
|
||||
@ApiOperation(value = "获取等待时间", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
||||
@ApiResponse(code = 200, message = "success", response = JSONObject.class)
|
||||
@RequestMapping(path = "/getWaitingTime", method = RequestMethod.POST)
|
||||
|
|
|
@ -17,9 +17,9 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by guange on 18/02/2017.
|
||||
* 接收jenkins传送的信息并进行处理,最后将处理结果传回trustie
|
||||
*@author lqk
|
||||
*/
|
||||
@Api(value = "pipeline控制器,用于pipeline脚本调用", hidden = true)
|
||||
@RestController
|
||||
|
@ -30,7 +30,9 @@ public class PipeLineController extends BaseController {
|
|||
|
||||
@Autowired
|
||||
TrustieApi trustieApi;
|
||||
|
||||
/**
|
||||
* 接收jenkins传送来的job构建结果,处理后返回此次评测的结果,如是否通过、某一关卡是否通过及其报错信息等
|
||||
*/
|
||||
@ApiOperation(value = "处理结果并将结果回传到BDWeb", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
||||
@RequestMapping(path = "/postTrainingGameInstanceResultToBDWeb")
|
||||
public JSONObject postTrainingGameInstanceResultToBDWeb(String buildID, String compileResult, String out, String in,
|
||||
|
|
|
@ -139,10 +139,10 @@ public class BuildThread implements Runnable{
|
|||
logger.debug("job:" + this.jobName + "不存在,线程退出");
|
||||
try {
|
||||
//job不存在时错误码为9
|
||||
postErrToTrustie("jobNoExist", 1, buildID,resubmit,jobName);
|
||||
postErrToTrustie("jobNoExist", -1, buildID,resubmit,jobName);
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
logger.error("jobName不存在," + this.jobName + "向前端发送错误信息失败");
|
||||
logger.error("job:" + this.jobName + "不存在,且向前端发送错误信息失败");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -155,6 +155,13 @@ public class BuildThread implements Runnable{
|
|||
buildJob();
|
||||
} catch (IOException e) {
|
||||
logger.error("job:" + jobName + "请求构建失败");
|
||||
try {
|
||||
postErrToTrustie("发送构建请求失败", -1, this.buildID, this.jobName, this.resubmit);
|
||||
} catch (Exception e1) {
|
||||
// TODO Auto-generated catch block
|
||||
e1.printStackTrace();
|
||||
logger.error(this.jobName + "发送构建请求失败且向前端发送错误信息时也报错");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -234,6 +241,7 @@ public class BuildThread implements Runnable{
|
|||
postErrToTrustie("获取job状态时出错", -1, this.buildID, this.jobName, this.resubmit);
|
||||
}catch (Exception statusEx){
|
||||
logger.debug("传输错误信息至前端时出错");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -253,6 +261,7 @@ public class BuildThread implements Runnable{
|
|||
}catch(Exception e1)
|
||||
{
|
||||
e1.printStackTrace();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ public class JobUtils {
|
|||
return Pattern.compile(regex,Pattern.CASE_INSENSITIVE).matcher(src).find();
|
||||
}
|
||||
|
||||
public static void writeErr(String file, String conent)
|
||||
public void writeErr(String file, String conent)
|
||||
{
|
||||
BufferedWriter out = null;
|
||||
try
|
||||
|
|
|
@ -35,4 +35,11 @@ public class Base64Helper {
|
|||
byte[] decode = Base64.decodeBase64(code);
|
||||
return new String(decode, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static String replaceDecode(String code) throws UnsupportedEncodingException {
|
||||
byte[] decode = Base64.decodeBase64(code.replace(" ", "+"));
|
||||
return new String(decode, StandardCharsets.UTF_8);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,9 @@ import com.educoder.jenkins.service.BuildThread;
|
|||
public class BeanFactory {
|
||||
static ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
|
||||
public static Object getObejct(String className){
|
||||
BuildThread buildThreadNew = (BuildThread)ctx.getBean(className);
|
||||
return buildThreadNew;
|
||||
Object object = ctx.getBean(className);
|
||||
return object;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -87,9 +87,9 @@
|
|||
<property name="pipelineTemplateFileName">
|
||||
<list>
|
||||
<value>fullTemplateJava.pipeline</value>
|
||||
<value>fullTemplateJava.pipeline</value>
|
||||
<value>fullTemplatePython.pipeline</value>
|
||||
<value>fullTemplateJDBC.pipeline</value>
|
||||
<value>fullTemplateJava.pipeline</value>
|
||||
<value>fullTemplateGCC.pipeline</value>
|
||||
</list>
|
||||
</property>
|
||||
|
||||
|
|
|
@ -1,74 +1,7 @@
|
|||
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 ' + compileFile + ' -o executeFile.out > compile_result_CHALLENGESTAGE.out 2>&1'
|
||||
} catch(err)
|
||||
{
|
||||
//resubmit是以字符串的形式传进来的
|
||||
//重复构建时需要删除之前构建的成功的class并catch掉class文件不存在的异常
|
||||
catchError{
|
||||
sh 'rm executeFile.out'
|
||||
}
|
||||
}
|
||||
|
||||
//获取编译结果
|
||||
compileResult = readFile ('compile_result_CHALLENGESTAGE.out')
|
||||
|
||||
// 如果编译通过
|
||||
if (compileResult.trim() == '') {
|
||||
compileResult = 'compile successfully'
|
||||
}
|
||||
|
||||
|
||||
StringBuilder input = new StringBuilder('[')
|
||||
StringBuilder output = new StringBuilder('[')
|
||||
StringBuilder expectedOut = new StringBuilder('[')
|
||||
StringBuilder isPublic = new StringBuilder('[')
|
||||
//得到文件夹下的文件总数
|
||||
def fileNumsStr = sh script: 'cd ../testCases/TRAININGID/CHALLENGESTAGE && ls -l |grep "^-"|wc -l', returnStdout: true
|
||||
def fileNums = Integer.parseInt(fileNumsStr.trim())
|
||||
for (int i = 1; i <= fileNums/3; i++) {
|
||||
// 读取输入和预期输出
|
||||
//由于文件的名字的命名是有规律的,所以可以直接以序号来拼接成文件名
|
||||
def inI = readFile '../testCases/TRAININGID/CHALLENGESTAGE/' + i + '.in'
|
||||
def expectedOutI = readFile '../testCases/TRAININGID/CHALLENGESTAGE/' + i + '.out'
|
||||
def isPublicI = readFile '../testCases/TRAININGID/CHALLENGESTAGE/' + i + '.isPublic'
|
||||
//取出文件执行得到结果,然后和预期输出比较就可以判断正误
|
||||
// 从in.txt读入,程序运行输出重定向到out.txt
|
||||
|
||||
catchError
|
||||
{
|
||||
sh script: 'EXECUTECOMMANDexecuteFile.out < ../testCases/TRAININGID/CHALLENGESTAGE/' + i + '.in > actual_result_CHALLENGESTAGE_' + i + '.out 2>&1 '
|
||||
}
|
||||
|
||||
def outI = readFile 'actual_result_CHALLENGESTAGE_' + i + '.out'
|
||||
|
||||
// 拼接成json格式
|
||||
input.append("\"" + base64Encode(inI) + "\",");
|
||||
output.append("\"" + base64Encode(outI) + "\",");
|
||||
expectedOut.append("\"" + base64Encode(expectedOutI) + "\",");
|
||||
isPublic.append("\"" + isPublicI + "\",");
|
||||
|
||||
}
|
||||
|
||||
input = input.deleteCharAt(input.length() - 1);
|
||||
input = input.append("]");
|
||||
|
||||
output = output.deleteCharAt(output.length() - 1);
|
||||
output = output.append("]");
|
||||
|
||||
expectedOut = expectedOut.deleteCharAt(expectedOut.length() - 1);
|
||||
expectedOut = expectedOut.append("]");
|
||||
|
||||
isPublic = isPublic.deleteCharAt(isPublic.length() - 1);
|
||||
isPublic = isPublic.append("]");
|
||||
// 由中间层判断结果之后发送给BDWeb
|
||||
postGameInstanceResultToBDWeb(compileResult: base64Encode(compileResult), out: output, in:input, expectedOut:expectedOut , isPublic:isPublic)
|
||||
|
||||
}
|
||||
String compileCommand = COMPILECOMMAND
|
||||
String challengeProgramName = CHALLENGEPROGRAMNAME
|
||||
String executeCommand = EXECUTECOMMAND
|
||||
String sourceClassName = SOURCECLASSNAME
|
||||
buildJob(compileCommand:compileCommand,challengeProgramName:challengeProgramName, executeCommand:executeCommand, sourceClassName:sourceClassName)
|
||||
}
|
||||
|
|
|
@ -4,4 +4,4 @@ if (currentChallenge == CHALLENGESTAGE) {
|
|||
String executeCommand = EXECUTECOMMAND
|
||||
String sourceClassName = SOURCECLASSNAME
|
||||
buildJob(compileCommand:compileCommand,challengeProgramName:challengeProgramName, executeCommand:executeCommand, sourceClassName:sourceClassName)
|
||||
}
|
||||
}
|
|
@ -4,4 +4,4 @@ if (currentChallenge == CHALLENGESTAGE) {
|
|||
String executeCommand = EXECUTECOMMAND
|
||||
String sourceClassName = SOURCECLASSNAME
|
||||
buildJob(compileCommand:compileCommand,challengeProgramName:challengeProgramName, executeCommand:executeCommand, sourceClassName:sourceClassName)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
|
||||
#Online
|
||||
trustieUrl=http://10.9.153.195:8888/myshixuns/training_task_status
|
||||
jenkinsUrl=http://10.9.184.140:8888
|
||||
#trustieUrl=http://10.9.153.195:8888/myshixuns/training_task_status
|
||||
#jenkinsUrl=http://10.9.184.140:8888
|
||||
poolSize=6
|
||||
jenkisUserName=root
|
||||
jenkisPassWord=root
|
||||
jenkisPassWord=jenkins@root123
|
||||
jenkinsConfigXmlPath=/var/lib/jenkins/config.xml
|
||||
|
||||
|
||||
#following setting are used in local test
|
||||
#jenkinsUrl=http://106.75.96.108:8888
|
||||
#trustieUrl=http://testbdweb.trustie.net/myshixuns/training_task_status
|
||||
jenkinsUrl=http://106.75.96.108:8888
|
||||
trustieUrl=http://testbdweb.trustie.net/myshixuns/training_task_status
|
||||
#poolSize=1
|
||||
#jenkisUserName=root
|
||||
#jenkisPassWord=root
|
||||
|
|
|
@ -4,7 +4,7 @@ trustieUrl=http://10.9.67.91:8890/myshixuns/training_task_status
|
|||
jenkinsUrl=http://10.9.81.28:8888
|
||||
|
||||
jenkisUserName=root
|
||||
jenkisPassWord=root
|
||||
jenkisPassWord=jenkins@root123
|
||||
|
||||
poolSize=6
|
||||
jenkinsConfigXmlPath=/var/lib/jenkins/config.xml
|
||||
|
|
|
@ -54,8 +54,6 @@ def base64Encode(arg) {
|
|||
}
|
||||
def bildJob(def arg)
|
||||
{
|
||||
if (currentChallenge == CHALLENGESTAGE) {
|
||||
|
||||
compileResult = ''
|
||||
try
|
||||
{
|
||||
|
|
|
@ -0,0 +1,129 @@
|
|||
{
|
||||
node('PODLABEL') {
|
||||
container('MAINCONTAINER') {
|
||||
def currentChallenge = Integer.parseInt(instanceChallenge)
|
||||
// 解决stage 0 401没有权限的问题
|
||||
if (currentChallenge == 0) {
|
||||
boolean flag = false;
|
||||
for(int i=0;i<5;i++){
|
||||
catchError {
|
||||
println(i + "times")
|
||||
Thread.sleep(100)
|
||||
git url: instanceGitURL
|
||||
flag = true;
|
||||
}
|
||||
if(flag == true) {
|
||||
currentBuild.result = 'SUCCESS';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
git url: instanceGitURL
|
||||
|
||||
CHALLENGEPIPELINES
|
||||
}
|
||||
}
|
||||
}
|
||||
// 传送运行结果到BDWeb
|
||||
def postGameInstanceResultToBDWeb(def arg){
|
||||
def s = 'compileResult=' + arg.compileResult + '&out=' + arg.out +
|
||||
'&in=' + arg.in + '&expectedOut=' + arg.expectedOut + '&isPublic=' + arg.isPublic
|
||||
def response = httpRequest acceptType: 'APPLICATION_JSON_UTF8', consoleLogResponseBody: true, contentType: 'APPLICATION_FORM',
|
||||
//httpMode: 'POST', requestBody: s, url: "http://123.59.135.74:9201/jenkins-exec/pipeline/postTrainingGameInstanceResultToBDWeb?buildID=${buildID}&reSubmit=${resubmit}"
|
||||
httpMode: 'POST', requestBody: s, url: BRIDGE_URL+"/jenkins-exec/pipeline/postTrainingGameInstanceResultToBDWeb?buildID=${buildID}&reSubmit=${resubmit}"
|
||||
|
||||
if (response.status==299){
|
||||
error response.content
|
||||
}
|
||||
}
|
||||
// 传送错误结果到BDWeb
|
||||
def postErrorToBDWeb(def arg){
|
||||
def s = 'errType=' + arg.errType + '&value=' + arg.value
|
||||
def response = httpRequest acceptType: 'APPLICATION_JSON_UTF8', consoleLogResponseBody: true, contentType: 'APPLICATION_FORM',
|
||||
httpMode: 'POST', requestBody: s, url: "http://123.59.135.74:9201/jenkins-exec/pipeline/postErrToBDWeb?buildID=${buildID}"
|
||||
|
||||
|
||||
if (response.status==299){
|
||||
error response.content
|
||||
}
|
||||
}
|
||||
|
||||
def base64Encode(arg) {
|
||||
return arg.bytes.encodeBase64().toString()
|
||||
}
|
||||
def buildJob(def arg){
|
||||
//生成编译文件路径,c++编译多文件可以使用g++ /*.cpp这种形式把所有的cpp全部编译
|
||||
compileFile = new StringBuilder(arg.challengeProgramName);
|
||||
lastPositon = compileFile.lastIndexOf('/');
|
||||
compileFile = compileFile.substring(0,lastPositon+1) + '*.cpp';
|
||||
compileResult = ''
|
||||
try
|
||||
{
|
||||
// 编译程序
|
||||
sh script: arg.compileCommand + ' ' + compileFile + ' -o executeFile.out > compile_result_' + arg.challengeStage + '.out 2>&1'
|
||||
} catch(err)
|
||||
{
|
||||
//resubmit是以字符串的形式传进来的
|
||||
//重复构建时需要删除之前构建的成功的class并catch掉class文件不存在的异常
|
||||
catchError{
|
||||
sh 'rm executeFile.out'
|
||||
}
|
||||
}
|
||||
|
||||
//获取编译结果
|
||||
compileResult = readFile ('compile_result_' + arg.challengeStage + '.out')
|
||||
|
||||
// 如果编译通过
|
||||
if (compileResult.trim() == '') {
|
||||
compileResult = 'compile successfully'
|
||||
}
|
||||
|
||||
|
||||
StringBuilder input = new StringBuilder('[')
|
||||
StringBuilder output = new StringBuilder('[')
|
||||
StringBuilder expectedOut = new StringBuilder('[')
|
||||
StringBuilder isPublic = new StringBuilder('[')
|
||||
//得到文件夹下的文件总数
|
||||
def fileNumsStr = sh script: 'cd ../testCases/' + arg.trainindID + '/' + arg.challengeStage + ' && ls -l |grep "^-"|wc -l', returnStdout: true
|
||||
def fileNums = Integer.parseInt(fileNumsStr.trim())
|
||||
for (int i = 1; i <= fileNums/3; i++) {
|
||||
// 读取输入和预期输出
|
||||
//由于文件的名字的命名是有规律的,所以可以直接以序号来拼接成文件名
|
||||
def inI = readFile '../testCases/' + arg.trainindID + '/' + arg.challengeStage + '/' + i + '.in'
|
||||
def expectedOutI = readFile '../testCases/' + arg.trainindID + '/' + arg.challengeStage + '/' + i + '.out'
|
||||
def isPublicI = readFile '../testCases/' + arg.trainindID + '/' + arg.challengeStage + '/' + i + '.isPublic'
|
||||
//取出文件执行得到结果,然后和预期输出比较就可以判断正误
|
||||
// 从in.txt读入,程序运行输出重定向到out.txt
|
||||
|
||||
catchError
|
||||
{
|
||||
sh script: arg.executeCommand + 'executeFile.out < ../testCases/' + arg.trainindID + '/' + arg.challengeStage + '/' + i + '.in > actual_result_' + arg.challengeStage + '_' + i + '.out 2>&1 '
|
||||
}
|
||||
|
||||
def outI = readFile 'actual_result_' + arg.challengeStage + '_' + i + '.out'
|
||||
|
||||
// 拼接成json格式
|
||||
input.append("\"" + base64Encode(inI) + "\",");
|
||||
output.append("\"" + base64Encode(outI) + "\",");
|
||||
expectedOut.append("\"" + base64Encode(expectedOutI) + "\",");
|
||||
isPublic.append("\"" + isPublicI + "\",");
|
||||
|
||||
}
|
||||
|
||||
input = input.deleteCharAt(input.length() - 1);
|
||||
input = input.append("]");
|
||||
|
||||
output = output.deleteCharAt(output.length() - 1);
|
||||
output = output.append("]");
|
||||
|
||||
expectedOut = expectedOut.deleteCharAt(expectedOut.length() - 1);
|
||||
expectedOut = expectedOut.append("]");
|
||||
|
||||
isPublic = isPublic.deleteCharAt(isPublic.length() - 1);
|
||||
isPublic = isPublic.append("]");
|
||||
// 由中间层判断结果之后发送给BDWeb
|
||||
postGameInstanceResultToBDWeb(compileResult: base64Encode(compileResult), out: output, in:input, expectedOut:expectedOut , isPublic:isPublic)
|
||||
|
||||
}
|
||||
}
|
|
@ -9,14 +9,14 @@ log4j.appender.stdout = org.apache.log4j.ConsoleAppender
|
|||
log4j.appender.stdout.Target = System.out
|
||||
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
|
||||
#log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
|
||||
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n
|
||||
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n%l
|
||||
|
||||
log4j.logger.org.springframework=ERROR
|
||||
|
||||
|
||||
log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender
|
||||
log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout
|
||||
log4j.appender.logDailyFile.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
|
||||
log4j.appender.logDailyFile.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n%l
|
||||
log4j.appender.logDailyFile.Threshold = DEBUG
|
||||
log4j.appender.logDailyFile.ImmediateFlush = TRUE
|
||||
log4j.appender.logDailyFile.Append = TRUE
|
||||
|
@ -26,7 +26,7 @@ log4j.appender.logDailyFile.Encoding = UTF-8
|
|||
|
||||
log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender
|
||||
log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout
|
||||
log4j.appender.logDailyFile.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
|
||||
log4j.appender.logDailyFile.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n%l
|
||||
log4j.appender.logDailyFile.Threshold = ERROR
|
||||
log4j.appender.logDailyFile.ImmediateFlush = TRUE
|
||||
log4j.appender.logDailyFile.Append = TRUE
|
||||
|
|
|
@ -3,8 +3,5 @@ remoteWorkspace=/home/jenkins/workspace
|
|||
java_podTemplate=podTemplate(label: 'PODLABEL', containers: [containerTemplate(name: 'openjdk', image: 'openjdk:latest', ttyEnabled: true, command: 'cat')],volumes:[hostPathVolume(hostPath: '${workspace}', mountPath: '${remoteWorkspace}')])
|
||||
python_podTemplate=podTemplate(label: 'PODLABEL', containers: [containerTemplate(name: 'python', image: 'python:latest', ttyEnabled: true, command: 'cat')],volumes:[hostPathVolume(hostPath: '${workspace}', mountPath: '${remoteWorkspace}')])
|
||||
jdbc_podTemplate=podTemplate(label: 'PODLABEL', containers: [containerTemplate(name: 'openjdk', image: 'openjdk:latest', ttyEnabled: true, command: 'cat'), containerTemplate(name: 'mysql', image: 'mysql57:latest', ttyEnabled: true, command: '/start.sh')],volumes:[hostPathVolume(hostPath: '${workspace}', mountPath: '${remoteWorkspace}')])
|
||||
<<<<<<< HEAD
|
||||
gcc_podTemplate=
|
||||
=======
|
||||
gcc_podTemplate=podTemplate(label: 'PODLABEL', containers: [containerTemplate(name: 'python', image: 'python:latest', ttyEnabled: true, command: 'cat')],volumes:[hostPathVolume(hostPath: '${workspace}', mountPath: '${remoteWorkspace}')])
|
||||
>>>>>>> fbc06d7a3fa687a33dcafcce959c9e6e1060a22e
|
||||
|
||||
|
|
|
@ -28,12 +28,12 @@ public class JenkinsApiTest extends SpringTestBase {
|
|||
JenkinsApi jenkinsApi;
|
||||
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void testConfig(){
|
||||
Assert.assertTrue(appConfig!=null);
|
||||
}
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void createJob() throws Exception {
|
||||
JenkinsServer server = new JenkinsServer(new URI(appConfig.getJenkinsUrl()), appConfig.getJenkisUserName(), appConfig.getJenkisPassWord());
|
||||
if (server.getJob("test") != null) {
|
||||
|
@ -52,7 +52,7 @@ public class JenkinsApiTest extends SpringTestBase {
|
|||
System.out.println(reString);
|
||||
}
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void testUpdateJob() throws IOException {
|
||||
String pipeLine = "node () {}";
|
||||
|
||||
|
@ -64,14 +64,14 @@ public class JenkinsApiTest extends SpringTestBase {
|
|||
jenkinsApi.updateJob("test", pipeLine, params);
|
||||
}
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void buildJob() throws Exception {
|
||||
jenkinsApi.buildJob("for_build_job", "1", "2", "https://bdgit.trustie.net/forge01/linkedlistdemo.git", "{}");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void getJobXml() throws Exception {
|
||||
String test = jenkinsApi.getJobXml("for_build_job");
|
||||
System.out.println(test);
|
||||
|
@ -79,12 +79,12 @@ public class JenkinsApiTest extends SpringTestBase {
|
|||
|
||||
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void reload() throws IOException {
|
||||
jenkinsApi.reloadConfig();
|
||||
}
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void addKubTemplate() throws Exception {
|
||||
Map map = new HashMap();
|
||||
map.put("instanceCap", 1);
|
||||
|
@ -92,7 +92,7 @@ public class JenkinsApiTest extends SpringTestBase {
|
|||
jenkinsApi.addKubTemplate("hello", map);
|
||||
}
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void rmKubTemplate() throws Exception {
|
||||
jenkinsApi.rmKubTemplate("hello");
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/*
|
||||
package cn.wangwei.app.jenkins;
|
||||
|
||||
import cn.guange.app.jenkins.SpringTestBase;
|
||||
|
@ -11,9 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URI;
|
||||
|
||||
*/
|
||||
/**
|
||||
* Created by weishao on 2017/4/12.
|
||||
*/
|
||||
*//*
|
||||
|
||||
public class GameControllerTest extends SpringTestBase {
|
||||
@Autowired
|
||||
GameController gameController;
|
||||
|
@ -132,3 +135,4 @@ public class GameControllerTest extends SpringTestBase {
|
|||
}
|
||||
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
|
||||
/**
|
||||
* 文件名 : GameControllerTest.java
|
||||
* 版权 : <版权/公司名>
|
||||
* 描述 : <描述>
|
||||
* @author liliy
|
||||
* 版本 : <版本>
|
||||
* 修改时间: 2017年6月21日
|
||||
* 修改内容: <修改内容>
|
||||
*/
|
||||
package com.educoder.jenkins.controller;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.educoder.jenkins.utils.BeanFactory;
|
||||
import com.educoder.jenkins.utils.ReadArguments;
|
||||
|
||||
/**
|
||||
* <一句话功能简述>
|
||||
* <功能详细描述>
|
||||
* @author liliy
|
||||
* @version [版本号,2017年6月21日]
|
||||
* @see [相关类/方法]
|
||||
* @since [产品/模块版本]
|
||||
*/
|
||||
|
||||
public class GameControllerTest {
|
||||
static GameController gameController;
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpBeforeClass() {
|
||||
gameController=(GameController)BeanFactory.getObejct("GameController");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void publishGameTest() throws Exception{
|
||||
String gameInfo=ReadArguments.gameInfo;
|
||||
JSONObject response=gameController.publishGame(gameInfo);
|
||||
String code=response.get("code").toString();
|
||||
String msg=response.get("msg").toString();
|
||||
assertEquals(code,"0");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
/**
|
||||
* 文件名 : ReadArguments.java
|
||||
* 版权 : <版权/公司名>
|
||||
* 描述 : <描述>
|
||||
* @author liliy
|
||||
* 版本 : <版本>
|
||||
* 修改时间: 2017年6月21日
|
||||
* 修改内容: <修改内容>
|
||||
*/
|
||||
package com.educoder.jenkins.utils;
|
||||
|
||||
/**
|
||||
* <一句话功能简述>
|
||||
* <功能详细描述>
|
||||
* @author liliy
|
||||
* @version [版本号,2017年6月21日]
|
||||
* @see [相关类/方法]
|
||||
* @since [产品/模块版本]
|
||||
*/
|
||||
|
||||
public class ReadArguments {
|
||||
|
||||
public static final String gameInfo="eyJ0cmFpbmluZ0lEIjoiMjIiLCJvcGVyYXRpb25FbnZpcm9ubWVudCI6Ikph dmEiLCJjaGFsbGVuZ2VJbmZvIjpbeyJjaGFsbGVuZ2VTdGFnZSI6IjEiLCJj aGFsbGVuZ2VUeXBlIjoiMSIsImNoYWxsZW5nZVByb2dyYW1OYW1lIjoic3Jj L3N0ZXAxL0xpc3ROb2RlVGVzdC5qYXZhIiwib3BlcmF0aW9uRW52aXJvbm1l bnQiOiJKYXZhIiwidHJhaW5pbmdJRCI6IjIyIn0seyJjaGFsbGVuZ2VTdGFn ZSI6IjIiLCJjaGFsbGVuZ2VUeXBlIjoiMSIsImNoYWxsZW5nZVByb2dyYW1O YW1lIjoidGVzdDAyLmphdmEiLCJvcGVyYXRpb25FbnZpcm9ubWVudCI6Ikph dmEiLCJ0cmFpbmluZ0lEIjoiMjIifV0sInRlc3RDYXNlcyI6W3siY2hhbGxl bmdlU3RhZ2UiOiIxIiwiY2hhbGxlbmdlVGVzdENhc2VzIjpbeyJjYXNlSWQi OiIzNSIsImlucHV0IjoiMSIsIm91dHB1dCI6IjEiLCJpc1B1YmxpYyI6IjEi fV19LHsiY2hhbGxlbmdlU3RhZ2UiOiIyIiwiY2hhbGxlbmdlVGVzdENhc2Vz IjpbeyJjYXNlSWQiOiIzNiIsImlucHV0IjoiMjIiLCJvdXRwdXQiOiIzMyIs ImlzUHVibGljIjoiMSJ9LHsiY2FzZUlkIjoiMzciLCJpbnB1dCI6IjExIiwi b3V0cHV0IjoiMjIyMiIsImlzUHVibGljIjoiMSJ9XX1dfQ==";
|
||||
}
|
|
@ -77,18 +77,28 @@ public class TestLQK {
|
|||
JenkinsServer jenkins = null;
|
||||
private static final Logger logger = LoggerFactory.getLogger(TestLQK.class);
|
||||
public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {
|
||||
String testString = "sh script:'rm -f ../testCases/" + "1" + "/*'" + "\n";
|
||||
System.out.println("testString:" + testString);
|
||||
// try {http://106.75.78.183:8888 。//http://106.75.96.108:8888
|
||||
InputStream resourceAsStream = TestLQK.class
|
||||
.getResourceAsStream("/"+"Pipeline.txt");
|
||||
String Content = IOUtils.toString(resourceAsStream, Charset.forName("UTF-8"));
|
||||
JenkinsServer jenkins = new JenkinsServer(new URI("http://106.75.96.108:8888/"), "root", "root");
|
||||
TestLQK testLQK = new TestLQK();
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("id", "1");
|
||||
|
||||
String jobXML = testLQK.makeJobXml(Content, params);
|
||||
System.out.println("jobXML:" + jobXML);
|
||||
jenkins.updateJob("myshixun_220", jobXML);
|
||||
// InputStream resourceAsStream = TestLQK.class
|
||||
// .getResourceAsStream("/"+"pipeline.txt");
|
||||
// String Content = IOUtils.toString(resourceAsStream, Charset.forName("UTF-8"));
|
||||
// JenkinsServer jenkins = new JenkinsServer(new URI("http://106.75.96.108:8888/"), "root", "root");
|
||||
// TestLQK testLQK = new TestLQK();
|
||||
// Map<String, String> params = new HashMap<>();
|
||||
// params.put("id", "1");
|
||||
//// Map<String, String> params = new HashMap<String, String>() {
|
||||
//// {
|
||||
//// put("instanceGitURL", "1");
|
||||
//// put("instanceChallenge", "1");
|
||||
//// put("buildID", "1");
|
||||
//// put("resubmit", "1");
|
||||
//// }
|
||||
//// };
|
||||
//
|
||||
// String jobXML = testLQK.makeJobXml(Content, params);
|
||||
//// System.out.println("jobXML:" + jobXML);
|
||||
// jenkins.updateJob("myshixun_220", jobXML);
|
||||
//testLQK.updateJob("myshixun_220", "test update pipeline", params);
|
||||
// Map<String, Job> jobs = jenkins.getJobs();
|
||||
// JobWithDetails job = jobs.get("myshixun_690").details();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
podTemplate(label: 'myshixun_692', containers: [containerTemplate(name: 'python', image: 'python:latest', ttyEnabled: true, command: 'cat')],volumes:[hostPathVolume(hostPath: '/data/workspace', mountPath: '/home/jenkins/workspace')]){
|
||||
podTemplate(label: '666999', containers: [containerTemplate(name: 'python', image: 'python:latest', ttyEnabled: true, command: 'cat')],volumes:[hostPathVolume(hostPath: '/data/workspace', mountPath: '/home/jenkins/workspace')]){
|
||||
node('myshixun_692') {
|
||||
container('python') {
|
||||
def currentChallenge = Integer.parseInt(instanceChallenge)
|
||||
|
|
|
@ -0,0 +1,245 @@
|
|||
|
||||
2017-06-14 15:42:00
|
||||
[ERROR]-[Thread: localhost-startStop-1]-[org.springframework.web.context.ContextLoader.initWebApplicationContext()]: Context initialization failed
|
||||
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'trustieApi': Unsatisfied dependency expressed through field 'appConfig'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'jenkisUserName' in string value "${jenkisUserName}"
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
|
||||
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
|
||||
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
|
||||
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
|
||||
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
|
||||
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
|
||||
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
|
||||
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
|
||||
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
|
||||
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
|
||||
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
|
||||
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
|
||||
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
|
||||
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
|
||||
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
|
||||
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
|
||||
at java.lang.Thread.run(Thread.java:745)
|
||||
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'jenkisUserName' in string value "${jenkisUserName}"
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
|
||||
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
|
||||
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
|
||||
... 24 more
|
||||
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'jenkisUserName' in string value "${jenkisUserName}"
|
||||
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
|
||||
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
|
||||
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)
|
||||
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
|
||||
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
|
||||
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
|
||||
... 35 more
|
||||
|
||||
2017-06-14 15:42:30
|
||||
[ERROR]-[Thread: localhost-startStop-1]-[org.springframework.web.context.ContextLoader.initWebApplicationContext()]: Context initialization failed
|
||||
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'trustieApi': Unsatisfied dependency expressed through field 'appConfig'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'jenkinsConfigXmlPath' in string value "${jenkinsConfigXmlPath}"
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
|
||||
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
|
||||
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
|
||||
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
|
||||
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
|
||||
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
|
||||
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
|
||||
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
|
||||
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
|
||||
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
|
||||
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
|
||||
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
|
||||
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
|
||||
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
|
||||
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
|
||||
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
|
||||
at java.lang.Thread.run(Thread.java:745)
|
||||
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'jenkinsConfigXmlPath' in string value "${jenkinsConfigXmlPath}"
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
|
||||
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
|
||||
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
|
||||
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
|
||||
... 24 more
|
||||
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'jenkinsConfigXmlPath' in string value "${jenkinsConfigXmlPath}"
|
||||
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
|
||||
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
|
||||
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)
|
||||
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
|
||||
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
|
||||
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086)
|
||||
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
|
||||
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
|
||||
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
|
||||
... 35 more
|
||||
|
||||
2017-06-14 15:45:19
|
||||
[ERROR]-[Thread: pool-1-thread-1]-[com.educoder.jenkins.service.BuildThread.handleJobFailure()]: jobName: myshixun_220 buildID: 1 biuldNum: 17 开始时间:2017-06-14 15:44:20
|
||||
|
||||
运行时间:0 运行参数:{instanceChallenge=1, buildID=1, resubmit=1, instanceGitURL=}errInfo: stillwaiting 9
|
||||
Started by user root
|
||||
[Pipeline] node
|
||||
Running on master in /var/lib/jenkins/workspace/myshixun_220
|
||||
[Pipeline] {
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
Sleeping for 1 sec
|
||||
[Pipeline] sleep
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue