Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
LinuxSuRen
jenkins
提交
850f55f0
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,发现更多精彩内容 >>
提交
850f55f0
编写于
8月 05, 2013
作者:
L
lvotypko
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix NullPointerException which is possible in concurrent builds.
上级
370989fe
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
74 addition
and
17 deletion
+74
-17
core/src/main/java/hudson/tasks/ArtifactArchiver.java
core/src/main/java/hudson/tasks/ArtifactArchiver.java
+13
-11
test/src/test/java/hudson/tasks/ArtifactArchiverTest.java
test/src/test/java/hudson/tasks/ArtifactArchiverTest.java
+61
-6
未找到文件。
core/src/main/java/hudson/tasks/ArtifactArchiver.java
浏览文件 @
850f55f0
...
...
@@ -170,17 +170,19 @@ public class ArtifactArchiver extends Recorder {
AbstractBuild
<?,?>
b
=
build
.
getProject
().
getLastCompletedBuild
();
Result
bestResultSoFar
=
Result
.
NOT_BUILT
;
while
(
b
!=
null
)
{
if
(
b
.
getResult
().
isBetterThan
(
bestResultSoFar
))
{
bestResultSoFar
=
b
.
getResult
();
}
else
{
// remove old artifacts
File
ad
=
b
.
getArtifactsDir
();
if
(
ad
.
exists
())
{
listener
.
getLogger
().
println
(
Messages
.
ArtifactArchiver_DeletingOld
(
b
.
getDisplayName
()));
try
{
Util
.
deleteRecursive
(
ad
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
(
listener
.
error
(
e
.
getMessage
()));
if
(
b
.
getResult
()!=
null
){
if
(
b
.
getResult
().
isBetterThan
(
bestResultSoFar
))
{
bestResultSoFar
=
b
.
getResult
();
}
else
{
// remove old artifacts
File
ad
=
b
.
getArtifactsDir
();
if
(
ad
.
exists
())
{
listener
.
getLogger
().
println
(
Messages
.
ArtifactArchiver_DeletingOld
(
b
.
getDisplayName
()));
try
{
Util
.
deleteRecursive
(
ad
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
(
listener
.
error
(
e
.
getMessage
()));
}
}
}
}
...
...
test/src/test/java/hudson/tasks/ArtifactArchiverTest.java
浏览文件 @
850f55f0
...
...
@@ -24,30 +24,39 @@
package
hudson.tasks
;
import
hudson.model.AbstractProject
;
import
org.junit.Test
;
import
hudson.FilePath
;
import
hudson.Launcher
;
import
hudson.model.AbstractBuild
;
import
hudson.model.BuildListener
;
import
hudson.model.FreeStyleProject
;
import
hudson.model.Result
;
import
hudson.model.StreamBuildListener
;
import
hudson.tasks.LogRotatorTest.TestsFail
;
import
java.io.File
;
import
static
hudson
.
tasks
.
LogRotatorTest
.
build
;
import
java.io.IOException
;
import
java.nio.charset.Charset
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
org.junit.Rule
;
import
org.jvnet.hudson.test.Bug
;
import
org.jvnet.hudson.test.FailureBuilder
;
import
org.jvnet.hudson.test.
HudsonTestCas
e
;
import
org.jvnet.hudson.test.
JenkinsRul
e
;
import
org.jvnet.hudson.test.TestBuilder
;
import
static
org
.
junit
.
Assert
.*;
/**
* Verifies that artifacts from the last successful and stable builds of a job will be kept if requested.
*/
public
class
ArtifactArchiverTest
extends
HudsonTestCase
{
public
class
ArtifactArchiverTest
{
@Rule
public
JenkinsRule
j
=
new
JenkinsRule
();
@Test
public
void
testSuccessVsFailure
()
throws
Exception
{
FreeStyleProject
project
=
createFreeStyleProject
();
FreeStyleProject
project
=
j
.
createFreeStyleProject
();
project
.
getPublishersList
().
replaceBy
(
Collections
.
singleton
(
new
ArtifactArchiver
(
"f"
,
""
,
true
,
false
)));
assertEquals
(
"(no artifacts)"
,
Result
.
FAILURE
,
build
(
project
));
// #1
assertFalse
(
project
.
getBuildByNumber
(
1
).
getHasArtifacts
());
...
...
@@ -83,9 +92,10 @@ public class ArtifactArchiverTest extends HudsonTestCase {
assertTrue
(
project
.
getBuildByNumber
(
7
).
getHasArtifacts
());
}
@Test
@Bug
(
2417
)
public
void
testStableVsUnstable
()
throws
Exception
{
FreeStyleProject
project
=
createFreeStyleProject
();
FreeStyleProject
project
=
j
.
createFreeStyleProject
();
Publisher
artifactArchiver
=
new
ArtifactArchiver
(
"f"
,
""
,
true
,
false
);
project
.
getPublishersList
().
replaceBy
(
Collections
.
singleton
(
artifactArchiver
));
project
.
getBuildersList
().
replaceBy
(
Collections
.
singleton
(
new
CreateArtifact
()));
...
...
@@ -120,9 +130,10 @@ public class ArtifactArchiverTest extends HudsonTestCase {
assertTrue
(
project
.
getBuildByNumber
(
6
).
getHasArtifacts
());
}
@Test
@Bug
(
3227
)
public
void
testEmptyDirectories
()
throws
Exception
{
FreeStyleProject
project
=
createFreeStyleProject
();
FreeStyleProject
project
=
j
.
createFreeStyleProject
();
Publisher
artifactArchiver
=
new
ArtifactArchiver
(
"dir/"
,
""
,
false
,
false
);
project
.
getPublishersList
().
replaceBy
(
Collections
.
singleton
(
artifactArchiver
));
project
.
getBuildersList
().
replaceBy
(
Collections
.
singleton
(
new
TestBuilder
()
{
...
...
@@ -148,13 +159,57 @@ public class ArtifactArchiverTest extends HudsonTestCase {
assertEquals
(
"file"
,
kids
[
0
].
getName
());
}
@Test
@Bug
(
10502
)
public
void
testAllowEmptyArchive
()
throws
Exception
{
FreeStyleProject
project
=
createFreeStyleProject
();
FreeStyleProject
project
=
j
.
createFreeStyleProject
();
project
.
getPublishersList
().
replaceBy
(
Collections
.
singleton
(
new
ArtifactArchiver
(
"f"
,
""
,
false
,
true
)));
assertEquals
(
"(no artifacts)"
,
Result
.
SUCCESS
,
build
(
project
));
assertFalse
(
project
.
getBuildByNumber
(
1
).
getHasArtifacts
());
}
private
void
runNewBuildAndStartUnitlIsCreated
(
AbstractProject
project
)
throws
InterruptedException
{
int
buildNumber
=
project
.
getNextBuildNumber
();
project
.
scheduleBuild2
(
0
);
int
count
=
0
;
while
(
project
.
getBuildByNumber
(
buildNumber
)==
null
&&
count
<
30
){
Thread
.
sleep
(
100
);
count
++;
}
if
(
project
.
getBuildByNumber
(
buildNumber
)==
null
)
fail
(
"Build "
+
buildNumber
+
" did not created."
);
}
@Test
public
void
testPrebuildWithConcurrentBuilds
()
throws
IOException
,
Exception
{
FreeStyleProject
project
=
j
.
createFreeStyleProject
();
j
.
jenkins
.
setNumExecutors
(
4
);
//logest build
project
.
getBuildersList
().
add
(
new
Shell
(
"sleep 100"
));
project
.
setConcurrentBuild
(
true
);
Publisher
artifactArchiver
=
new
ArtifactArchiver
(
"dir/"
,
""
,
true
,
false
);
runNewBuildAndStartUnitlIsCreated
(
project
);
//shortest build
project
.
getBuildersList
().
clear
();
j
.
buildAndAssertSuccess
(
project
);
//longest build
project
.
getBuildersList
().
add
(
new
Shell
(
"sleep 100"
));
runNewBuildAndStartUnitlIsCreated
(
project
);
AbstractBuild
build
=
project
.
getLastBuild
();
BuildListener
listner
=
new
StreamBuildListener
(
BuildListener
.
NULL
.
getLogger
(),
Charset
.
defaultCharset
());
try
{
System
.
out
.
println
(
"last build is "
+
project
.
getLastBuild
());
for
(
AbstractBuild
b:
project
.
getBuilds
()){
System
.
out
.
println
(
" build "
+
b
+
" sttus "
+
b
.
getResult
());
}
boolean
ok
=
artifactArchiver
.
prebuild
(
build
,
listner
);
assertTrue
(
"Artefact archiver should not have any problem."
,
ok
);
}
catch
(
Exception
e
){
fail
(
"Artefact archiver should not throw exception "
+
e
+
" for concurrent builds"
);
}
}
static
class
CreateArtifact
extends
TestBuilder
{
public
boolean
perform
(
AbstractBuild
<?,?>
build
,
Launcher
launcher
,
BuildListener
listener
)
throws
IOException
,
InterruptedException
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录