Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
LinuxSuRen
jenkins
提交
6b2af915
J
jenkins
项目概览
LinuxSuRen
/
jenkins
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jenkins
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6b2af915
编写于
8月 09, 2011
作者:
K
Kohsuke Kawaguchi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[FIXED JENKINS-8797] added CLI commands to manipulate jobs by their XML
definitions.
上级
64a6428d
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
135 addition
and
28 deletion
+135
-28
changelog.html
changelog.html
+3
-0
core/src/main/java/hudson/cli/GetJobXmlCommand.java
core/src/main/java/hudson/cli/GetJobXmlCommand.java
+50
-0
core/src/main/java/hudson/cli/UpdateJobXmlCommand.java
core/src/main/java/hudson/cli/UpdateJobXmlCommand.java
+49
-0
core/src/main/java/hudson/model/AbstractItem.java
core/src/main/java/hudson/model/AbstractItem.java
+33
-28
未找到文件。
changelog.html
浏览文件 @
6b2af915
...
...
@@ -86,6 +86,9 @@ Upcoming changes</a>
<li
class=
rfe
>
If CLI fails to connect via a JNLP Slave port, fall back to HTTP full-duplex.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-10611"
>
issue 10611
</a>
)
<li
class=
rfe
>
Added two CLI commands to manipulate job by its XML definition.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-8797"
>
issue 8797
</a>
)
<li
class=
rfe
>
Fixed unclear text for Tabs with no jobs
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-9330"
>
issue 9330
</a>
)
...
...
core/src/main/java/hudson/cli/GetJobXmlCommand.java
0 → 100644
浏览文件 @
6b2af915
/*
* The MIT License
*
* Copyright (c) 2011, CloudBees, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package
hudson.cli
;
import
hudson.model.AbstractProject
;
import
hudson.model.Item
;
import
hudson.util.IOUtils
;
import
org.kohsuke.args4j.Argument
;
/**
* @author Kohsuke Kawaguchi
*/
public
class
GetJobXmlCommand
extends
CLICommand
{
@Argument
(
metaVar
=
"JOB"
,
usage
=
"Name of the job"
,
required
=
true
)
public
AbstractProject
<?,?>
job
;
@Override
public
String
getShortDescription
()
{
return
"Dumps the job definition XML to stdout"
;
}
protected
int
run
()
throws
Exception
{
job
.
checkPermission
(
Item
.
EXTENDED_READ
);
IOUtils
.
copy
(
job
.
getConfigFile
().
getFile
(),
stdout
);
return
0
;
}
}
core/src/main/java/hudson/cli/UpdateJobXmlCommand.java
0 → 100644
浏览文件 @
6b2af915
/*
* The MIT License
*
* Copyright (c) 2011, CloudBees, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package
hudson.cli
;
import
hudson.model.AbstractProject
;
import
hudson.util.IOUtils
;
import
org.kohsuke.args4j.Argument
;
import
javax.xml.transform.stream.StreamSource
;
/**
* @author Kohsuke Kawaguchi
*/
public
class
UpdateJobXmlCommand
extends
CLICommand
{
@Argument
(
metaVar
=
"JOB"
,
usage
=
"Name of the job"
,
required
=
true
)
public
AbstractProject
<?,?>
job
;
@Override
public
String
getShortDescription
()
{
return
"Updates the job definition XML from stdin. The opposite of the get-job-xml command"
;
}
protected
int
run
()
throws
Exception
{
job
.
updateByXml
(
new
StreamSource
(
stdin
));
return
0
;
}
}
core/src/main/java/hudson/model/AbstractItem.java
浏览文件 @
6b2af915
...
...
@@ -51,10 +51,8 @@ import org.kohsuke.stapler.export.ExportedBean;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.kohsuke.stapler.StaplerRequest
;
...
...
@@ -509,32 +507,7 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet
}
if
(
req
.
getMethod
().
equals
(
"POST"
))
{
// submission
checkPermission
(
CONFIGURE
);
XmlFile
configXmlFile
=
getConfigFile
();
AtomicFileWriter
out
=
new
AtomicFileWriter
(
configXmlFile
.
getFile
());
try
{
try
{
// this allows us to use UTF-8 for storing data,
// plus it checks any well-formedness issue in the submitted
// data
Transformer
t
=
TransformerFactory
.
newInstance
()
.
newTransformer
();
t
.
transform
(
new
StreamSource
(
req
.
getReader
()),
new
StreamResult
(
out
));
out
.
close
();
}
catch
(
TransformerException
e
)
{
throw
new
IOException2
(
"Failed to persist configuration.xml"
,
e
);
}
// try to reflect the changes by reloading
new
XmlFile
(
Items
.
XSTREAM
,
out
.
getTemporaryFile
()).
unmarshal
(
this
);
onLoad
(
getParent
(),
getRootDir
().
getName
());
// if everything went well, commit this new version
out
.
commit
();
}
finally
{
out
.
abort
();
// don't leave anything behind
}
updateByXml
(
new
StreamSource
(
req
.
getReader
()));
return
;
}
...
...
@@ -542,6 +515,38 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet
rsp
.
sendError
(
SC_BAD_REQUEST
);
}
/**
* Updates Job by its XML definition.
*/
public
void
updateByXml
(
StreamSource
source
)
throws
IOException
{
checkPermission
(
CONFIGURE
);
XmlFile
configXmlFile
=
getConfigFile
();
AtomicFileWriter
out
=
new
AtomicFileWriter
(
configXmlFile
.
getFile
());
try
{
try
{
// this allows us to use UTF-8 for storing data,
// plus it checks any well-formedness issue in the submitted
// data
Transformer
t
=
TransformerFactory
.
newInstance
()
.
newTransformer
();
t
.
transform
(
source
,
new
StreamResult
(
out
));
out
.
close
();
}
catch
(
TransformerException
e
)
{
throw
new
IOException2
(
"Failed to persist configuration.xml"
,
e
);
}
// try to reflect the changes by reloading
new
XmlFile
(
Items
.
XSTREAM
,
out
.
getTemporaryFile
()).
unmarshal
(
this
);
onLoad
(
getParent
(),
getRootDir
().
getName
());
// if everything went well, commit this new version
out
.
commit
();
}
finally
{
out
.
abort
();
// don't leave anything behind
}
}
public
String
toString
()
{
return
super
.
toString
()+
'['
+
getFullName
()+
']'
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录