Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
LinuxSuRen
jenkins
提交
244e4dcd
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,发现更多精彩内容 >>
提交
244e4dcd
编写于
1月 24, 2014
作者:
O
Oliver Gondža
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Introduce OfflineCause.UserCause
上级
03a04ac3
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
191 addition
and
26 deletion
+191
-26
core/src/main/java/hudson/model/Computer.java
core/src/main/java/hudson/model/Computer.java
+2
-6
core/src/main/java/hudson/slaves/OfflineCause.java
core/src/main/java/hudson/slaves/OfflineCause.java
+26
-8
core/src/main/java/hudson/slaves/SlaveComputer.java
core/src/main/java/hudson/slaves/SlaveComputer.java
+1
-4
core/src/main/resources/hudson/slaves/Messages.properties
core/src/main/resources/hudson/slaves/Messages.properties
+0
-1
core/src/main/resources/hudson/slaves/Messages_da.properties
core/src/main/resources/hudson/slaves/Messages_da.properties
+0
-1
core/src/main/resources/hudson/slaves/Messages_de.properties
core/src/main/resources/hudson/slaves/Messages_de.properties
+0
-1
core/src/main/resources/hudson/slaves/Messages_es.properties
core/src/main/resources/hudson/slaves/Messages_es.properties
+0
-1
core/src/main/resources/hudson/slaves/Messages_ja.properties
core/src/main/resources/hudson/slaves/Messages_ja.properties
+0
-1
core/src/main/resources/hudson/slaves/Messages_pt_BR.properties
...rc/main/resources/hudson/slaves/Messages_pt_BR.properties
+0
-2
core/src/main/resources/hudson/slaves/Messages_zh_TW.properties
...rc/main/resources/hudson/slaves/Messages_zh_TW.properties
+0
-1
test/src/main/java/hudson/cli/CLICommandInvoker.java
test/src/main/java/hudson/cli/CLICommandInvoker.java
+15
-0
test/src/test/java/hudson/cli/ComputerStateTest.java
test/src/test/java/hudson/cli/ComputerStateTest.java
+118
-0
test/src/test/java/hudson/model/NodeTest.java
test/src/test/java/hudson/model/NodeTest.java
+29
-0
未找到文件。
core/src/main/java/hudson/model/Computer.java
浏览文件 @
244e4dcd
...
...
@@ -1085,9 +1085,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
checkPermission
(
DISCONNECT
);
offlineMessage
=
Util
.
fixEmptyAndTrim
(
offlineMessage
);
setTemporarilyOffline
(!
temporarilyOffline
,
OfflineCause
.
create
(
hudson
.
slaves
.
Messages
.
_SlaveComputer_DisconnectedBy
(
Jenkins
.
getAuthentication
().
getName
(),
offlineMessage
!=
null
?
" : "
+
offlineMessage
:
""
)));
new
OfflineCause
.
UserCause
(
User
.
current
(),
offlineMessage
));
}
else
{
checkPermission
(
CONNECT
);
setTemporarilyOffline
(!
temporarilyOffline
,
null
);
...
...
@@ -1099,9 +1097,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
checkPermission
(
DISCONNECT
);
offlineMessage
=
Util
.
fixEmptyAndTrim
(
offlineMessage
);
setTemporarilyOffline
(
true
,
OfflineCause
.
create
(
hudson
.
slaves
.
Messages
.
_SlaveComputer_DisconnectedBy
(
Jenkins
.
getAuthentication
().
getName
(),
offlineMessage
!=
null
?
" : "
+
offlineMessage
:
""
)));
new
OfflineCause
.
UserCause
(
User
.
current
(),
offlineMessage
));
return
HttpResponses
.
redirectToDot
();
}
...
...
core/src/main/java/hudson/slaves/OfflineCause.java
浏览文件 @
244e4dcd
...
...
@@ -24,8 +24,12 @@
package
hudson.slaves
;
import
jenkins.model.Jenkins
;
import
hudson.Functions
;
import
hudson.model.Computer
;
import
hudson.model.User
;
import
org.acegisecurity.Authentication
;
import
org.jvnet.localizer.Localizable
;
import
org.kohsuke.stapler.export.ExportedBean
;
import
org.kohsuke.stapler.export.Exported
;
...
...
@@ -96,19 +100,33 @@ public abstract class OfflineCause {
}
}
public
static
class
ByCLI
extends
OfflineCause
{
/**
* Taken offline by user.
* @since TODO
*/
public
static
class
UserCause
extends
SimpleOfflineCause
{
private
final
User
user
;
public
UserCause
(
User
user
,
String
message
)
{
super
(
hudson
.
slaves
.
Messages
.
_SlaveComputer_DisconnectedBy
(
user
.
getId
(),
message
!=
null
?
" : "
+
message
:
""
));
this
.
user
=
user
;
}
public
User
getUser
()
{
return
user
;
}
}
public
static
class
ByCLI
extends
UserCause
{
@Exported
public
final
String
message
;
public
ByCLI
(
String
message
)
{
super
(
User
.
current
(),
message
);
this
.
message
=
message
;
}
@Override
public
String
toString
()
{
if
(
message
==
null
)
return
Messages
.
OfflineCause_DisconnectedFromCLI
();
return
message
;
}
}
}
core/src/main/java/hudson/slaves/SlaveComputer.java
浏览文件 @
244e4dcd
...
...
@@ -530,10 +530,7 @@ public class SlaveComputer extends Computer {
//does nothing in case computer is already disconnected
checkPermission
(
DISCONNECT
);
offlineMessage
=
Util
.
fixEmptyAndTrim
(
offlineMessage
);
disconnect
(
OfflineCause
.
create
(
Messages
.
_SlaveComputer_DisconnectedBy
(
Jenkins
.
getAuthentication
().
getName
(),
offlineMessage
!=
null
?
" : "
+
offlineMessage
:
""
)
));
disconnect
(
new
OfflineCause
.
UserCause
(
User
.
current
(),
offlineMessage
));
}
return
new
HttpRedirect
(
"."
);
}
...
...
core/src/main/resources/hudson/slaves/Messages.properties
浏览文件 @
244e4dcd
...
...
@@ -31,7 +31,6 @@ CommandLauncher.NoLaunchCommand=No launch command specified
ConnectionActivityMonitor.OfflineCause
=
Repeated ping attempts failed
DumbSlave.displayName
=
Dumb Slave
NodeProvisioner.EmptyString
=
OfflineCause.DisconnectedFromCLI
=
Disconnected from CLI
OfflineCause.LaunchFailed
=
This node is offline because Jenkins failed to launch the slave agent on it.
OfflineCause.connection_was_broken_
=
Connection was broken: {0}
SimpleScheduledRetentionStrategy.FinishedUpTime
=
Computer has finished its scheduled uptime
...
...
core/src/main/resources/hudson/slaves/Messages_da.properties
浏览文件 @
244e4dcd
...
...
@@ -24,7 +24,6 @@ SimpleScheduledRetentionStrategy.displayName=Bring denne slave online efter en t
RetentionStrategy.Always.displayName
=
Hold denne slave online s
\u
00e5 meget som muligt
RetentionStrategy.Demand.OfflineIdle
=
Offline da computeren var i tomgang; vil blive genstartet n
\u
00e5r n
\u
00f8dvendigt.
SimpleScheduledRetentionStrategy.FinishedUpTime
=
Computeren har afsluttet sin planlagte oppetid
OfflineCause.DisconnectedFromCLI
=
Afkoblet fra CLI''en
EnvironmentVariablesNodeProperty.displayName
=
Milj
\u
00f8variable
DumbSlave.displayName
=
Dum Slave
ComputerLauncher.abortedLaunch
=
Opstart af slaveproces afbrudt.
...
...
core/src/main/resources/hudson/slaves/Messages_de.properties
浏览文件 @
244e4dcd
...
...
@@ -31,7 +31,6 @@ ComputerLauncher.abortedLaunch=Start eines Slave-Prozesses abgebrochen.
CommandLauncher.NoLaunchCommand
=
Kein Startkommando angegeben.
DumbSlave.displayName
=
Dumb slave
OfflineCause.LaunchFailed
=
Dieser Knoten ist nicht verfügbar, weil Jenkins den Slave nicht starten konnte.
OfflineCause.DisconnectedFromCLI
=
Getrennt mittels CLI
SimpleScheduledRetentionStrategy.displayName
=
Slave zeitgesteuert anschalten
SimpleScheduledRetentionStrategy.FinishedUpTime
=
Slave hat seine geplante Online-Zeit beendet.
EnvironmentVariablesNodeProperty.displayName
=
Umgebungsvariablen
...
...
core/src/main/resources/hudson/slaves/Messages_es.properties
浏览文件 @
244e4dcd
...
...
@@ -30,7 +30,6 @@ ComputerLauncher.abortedLaunch=El inicio del agente en el nodo secundario ha sid
CommandLauncher.NoLaunchCommand
=
No se ha especificado ningn comando
ConnectionActivityMonitor.OfflineCause
=
No hubo respuesta a ''ping'' despues de varios intentos
DumbSlave.displayName
=
Secundario pasivo
OfflineCause.DisconnectedFromCLI
=
Desconectado de CLI
OfflineCause.LaunchFailed
=
Este nodo est fuera de lnea porque Jenkins no pudo iniciar el agente esclavo.
SimpleScheduledRetentionStrategy.FinishedUpTime
=
El nodo ha finalizado el tiempo programado de estar on-line
SimpleScheduledRetentionStrategy.displayName
=
Programar cundo se debe poner este nodo secundario en lnea.
...
...
core/src/main/resources/hudson/slaves/Messages_ja.properties
浏览文件 @
244e4dcd
...
...
@@ -31,7 +31,6 @@ CommandLauncher.NoLaunchCommand=\u8d77\u52d5\u30b3\u30de\u30f3\u30c9\u304c\u6307
ConnectionActivityMonitor.OfflineCause
=
\u
4f55
\u
5ea6
\u3082
ping
\u
304c
\u5931\u6557\u3057\u
307e
\u3057\u
305f
\u3002
DumbSlave.displayName
=
\u
30c0
\u
30e0
\u
30b9
\u
30ec
\u
30fc
\u
30d6
NodeProvisioner.EmptyString
=
OfflineCause.DisconnectedFromCLI
=
CLI
\u3068\u
306e
\u
63a5
\u
7d9a
\u
304c
\u5207\u
65ad
\u3055\u
308c
\u
307e
\u3057\u
305f
\u3002
OfflineCause.LaunchFailed
=
\u
30b9
\u
30ec
\u
30fc
\u
30d6
\u
30a8
\u
30fc
\u
30b8
\u
30a7
\u
30f3
\u
30c8
\u
306e
\u
8d77
\u
52d5
\u
306b
\u5931\u6557\u3057\u
305f
\u
305f
\u3081\u3001\u3053\u
306e
\u
30ce
\u
30fc
\u
30c9
\u
306f
\u
30aa
\u
30d5
\u
30e9
\u
30a4
\u
30f3
\u3067\u3059\u3002
SimpleScheduledRetentionStrategy.FinishedUpTime
=
\u
30b3
\u
30f3
\u
30d4
\u
30e5
\u
30fc
\u
30bf
\u
306e
\u
52d5
\u
4f5c
\u
53ef
\u
80fd
\u6642\u9593\u
304c
\u
7d42
\u
4e86
\u3057\u
307e
\u3057\u
305f
\u3002
SimpleScheduledRetentionStrategy.displayName
=
\u
30b9
\u
30b1
\u
30b8
\u
30e5
\u
30fc
\u
30eb
\u
306b
\u
5f93
\u3063\u3066\u
30aa
\u
30f3
\u
30e9
\u
30a4
\u
30f3
\u
306b
\u3059\u
308b
...
...
core/src/main/resources/hudson/slaves/Messages_pt_BR.properties
浏览文件 @
244e4dcd
...
...
@@ -30,8 +30,6 @@ ComputerLauncher.abortedLaunch=Processo de lan\u00e7amento de slave abortado.
SimpleScheduledRetentionStrategy.displayName
=
Colocar o slave online de acordo com o agendamento
# This node is offline because Jenkins failed to launch the slave agent on it.
OfflineCause.LaunchFailed
=
Esse n
\u
00f3 est
\u
00e1 offline porque Jenkins falhou ao lan
\u
00e7ar o agente slave
# Disconnected from CLI
OfflineCause.DisconnectedFromCLI
=
Desconectado do CLI
# No launch command specified
CommandLauncher.NoLaunchCommand
=
Sem nenhum comando de lan
\u
00e7amento especificado
# Offline because computer was idle; it will be relaunched when needed.
...
...
core/src/main/resources/hudson/slaves/Messages_zh_TW.properties
浏览文件 @
244e4dcd
...
...
@@ -36,7 +36,6 @@ EnvironmentVariablesNodeProperty.displayName=\u74b0\u5883\u8b8a\u6578
JNLPLauncher.displayName
=
\u
900f
\u
904e Java Web Start
\u
555f
\u
52d5 Slave
\u
4ee3
\u7406\u
7a0b
\u
5f0f
NodeDescripter.CheckName.Mandatory
=
\u
4e00
\u
5b9a
\u8981\u
8f38
\u5165\u
540d
\u
7a31
OfflineCause.DisconnectedFromCLI
=
\u7531\u
547d
\u
4ee4
\u5217\u
4ecb
\u9762\u
4e2d
\u
65b7
\u9023\u
7dda
OfflineCause.LaunchFailed
=
\u
7bc0
\u
9ede
\u
96e2
\u
7dda
\u
ff0c
\u
56e0
\u
70ba Jenkins
\u7121\u
6cd5
\u
555f
\u
52d5
\u
4e0a
\u9762\u7684
Slave
\u
4ee3
\u7406\u
7a0b
\u
5f0f
\u3002
RetentionStrategy.Always.displayName
=
\u
76e1
\u
53ef
\u
80fd
\u
8b93 Slave
\u
4e0a
\u
7dda
...
...
test/src/main/java/hudson/cli/CLICommandInvoker.java
浏览文件 @
244e4dcd
...
...
@@ -74,6 +74,13 @@ public class CLICommandInvoker {
this
.
command
=
command
;
}
public
CLICommandInvoker
(
final
JenkinsRule
rule
,
final
String
command
)
{
this
.
rule
=
rule
;
this
.
command
=
CLICommand
.
clone
(
command
);
if
(
this
.
command
==
null
)
throw
new
AssertionError
(
"No such command: "
+
command
);
}
public
CLICommandInvoker
authorizedTo
(
final
Permission
...
permissions
)
{
this
.
permissions
=
Arrays
.
asList
(
permissions
);
...
...
@@ -228,6 +235,14 @@ public class CLICommandInvoker {
};
}
public
static
Matcher
succeededSilently
()
{
return
new
Matcher
(
"Succeeded silently"
)
{
@Override
protected
boolean
matchesSafely
(
Result
result
)
{
return
result
.
result
==
0
&&
""
.
equals
(
result
.
stderr
())
&&
""
.
equals
(
result
.
stdout
());
}
};
}
public
static
Matcher
failedWith
(
final
long
expectedCode
)
{
return
new
Matcher
(
"Exited with "
+
expectedCode
+
" return code"
)
{
@Override
protected
boolean
matchesSafely
(
Result
result
)
{
...
...
test/src/test/java/hudson/cli/ComputerStateTest.java
0 → 100644
浏览文件 @
244e4dcd
/*
* The MIT License
*
* Copyright (c) 2014 Red Hat, 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
static
org
.
junit
.
Assert
.*;
import
static
hudson
.
cli
.
CLICommandInvoker
.
Matcher
.*;
import
static
org
.
hamcrest
.
Matchers
.
endsWith
;
import
static
org
.
hamcrest
.
Matchers
.
equalTo
;
import
jenkins.model.Jenkins
;
import
hudson.cli.CLICommandInvoker.Result
;
import
hudson.model.Computer
;
import
hudson.model.Slave
;
import
hudson.model.User
;
import
hudson.security.ACL
;
import
hudson.slaves.OfflineCause.UserCause
;
import
org.junit.Rule
;
import
org.junit.Test
;
import
org.jvnet.hudson.test.JenkinsRule
;
/**
* @author ogondza
*/
public
class
ComputerStateTest
{
@Rule
public
JenkinsRule
j
=
new
JenkinsRule
();
@Test
public
void
connect
()
throws
Exception
{
CLICommandInvoker
command
=
new
CLICommandInvoker
(
j
,
"connect-node"
);
Slave
slave
=
j
.
createSlave
();
assertTrue
(
slave
.
toComputer
().
isOffline
());
Result
result
=
command
.
authorizedTo
(
Jenkins
.
READ
,
Computer
.
CONNECT
)
.
invokeWithArgs
(
slave
.
getNodeName
())
;
assertThat
(
result
,
succeededSilently
());
slave
.
toComputer
().
waitUntilOnline
();
assertTrue
(
slave
.
toComputer
().
isOnline
());
}
@Test
public
void
online
()
throws
Exception
{
CLICommandInvoker
command
=
new
CLICommandInvoker
(
j
,
"online-node"
);
Slave
slave
=
j
.
createSlave
();
assertTrue
(
slave
.
toComputer
().
isOffline
());
Result
result
=
command
.
authorizedTo
(
Jenkins
.
READ
,
Computer
.
CONNECT
)
.
invokeWithArgs
(
slave
.
getNodeName
())
;
assertThat
(
result
,
succeededSilently
());
slave
.
toComputer
().
waitUntilOnline
();
assertTrue
(
slave
.
toComputer
().
isOnline
());
}
@Test
public
void
disconnect
()
throws
Exception
{
CLICommandInvoker
command
=
new
CLICommandInvoker
(
j
,
"disconnect-node"
);
Slave
slave
=
j
.
createOnlineSlave
();
assertTrue
(
slave
.
toComputer
().
isOnline
());
Result
result
=
command
.
authorizedTo
(
Jenkins
.
READ
,
Computer
.
DISCONNECT
)
.
invokeWithArgs
(
slave
.
getNodeName
(),
"-m"
,
"Custom cause message"
)
;
assertThat
(
result
,
succeededSilently
());
assertTrue
(
slave
.
toComputer
().
isOffline
());
UserCause
cause
=
(
UserCause
)
slave
.
toComputer
().
getOfflineCause
();
assertThat
(
cause
.
toString
(),
endsWith
(
"Custom cause message"
));
assertThat
(
cause
.
getUser
(),
equalTo
(
command
.
user
()));
}
@Test
public
void
offline
()
throws
Exception
{
CLICommandInvoker
command
=
new
CLICommandInvoker
(
j
,
"offline-node"
);
Slave
slave
=
j
.
createOnlineSlave
();
assertTrue
(
slave
.
toComputer
().
isOnline
());
Result
result
=
command
.
authorizedTo
(
Jenkins
.
READ
,
Computer
.
DISCONNECT
)
.
invokeWithArgs
(
slave
.
getNodeName
(),
"-m"
,
"Custom cause message"
)
;
assertThat
(
result
,
succeededSilently
());
assertTrue
(
slave
.
toComputer
().
isOffline
());
UserCause
cause
=
(
UserCause
)
slave
.
toComputer
().
getOfflineCause
();
assertThat
(
cause
.
toString
(),
endsWith
(
"Custom cause message"
));
assertThat
(
cause
.
getUser
(),
equalTo
(
command
.
user
()));
}
}
test/src/test/java/hudson/model/NodeTest.java
浏览文件 @
244e4dcd
...
...
@@ -31,12 +31,15 @@ import hudson.util.TagCloud.Entry;
import
hudson.util.TagCloud
;
import
hudson.model.labels.LabelAtom
;
import
hudson.model.queue.CauseOfBlockage
;
import
hudson.security.ACL
;
import
hudson.security.GlobalMatrixAuthorizationStrategy
;
import
hudson.security.HudsonPrivateSecurityRealm
;
import
hudson.slaves.ComputerListener
;
import
hudson.slaves.NodeProperty
;
import
hudson.slaves.OfflineCause
;
import
hudson.slaves.OfflineCause.ByCLI
;
import
hudson.slaves.OfflineCause.UserCause
;
import
java.util.Collection
;
import
java.util.GregorianCalendar
;
import
org.junit.Rule
;
...
...
@@ -88,6 +91,32 @@ public class NodeTest {
assertEquals
(
"Node should have original offline cause after setting another."
,
cause
,
node
.
toComputer
().
getOfflineCause
());
}
@Test
public
void
testOfflineCause
()
throws
Exception
{
Node
node
=
j
.
createOnlineSlave
();
Computer
computer
=
node
.
toComputer
();
OfflineCause
.
UserCause
cause
;
final
User
someone
=
User
.
get
(
"someone@somewhere.com"
);
ACL
.
impersonate
(
someone
.
impersonate
());
computer
.
doToggleOffline
(
"original message"
);
cause
=
(
UserCause
)
computer
.
getOfflineCause
();
assertEquals
(
"Disconnected by someone@somewhere.com : original message"
,
cause
.
toString
());
assertEquals
(
someone
,
cause
.
getUser
());
final
User
root
=
User
.
get
(
"root@localhost"
);
ACL
.
impersonate
(
root
.
impersonate
());
computer
.
doChangeOfflineCause
(
"new message"
);
cause
=
(
UserCause
)
computer
.
getOfflineCause
();
assertEquals
(
"Disconnected by root@localhost : new message"
,
cause
.
toString
());
assertEquals
(
root
,
cause
.
getUser
());
computer
.
doToggleOffline
(
null
);
assertNull
(
computer
.
getOfflineCause
());
}
@Test
public
void
testGetLabelCloud
()
throws
Exception
{
Node
node
=
j
.
createOnlineSlave
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录