詹金斯从API setLabelString添加到用户列表 [英] jenkins Slave API setLabelString adds to User list
本文介绍了詹金斯从API setLabelString添加到用户列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下脚本工作,它在运行时会将用户id到从标签下。
进口jenkins.model.Jenkins
进口hudson.model.User
进口hudson.security.Permission
进口hudson.EnvVarsenvvars中envvars中= build.getEnvironment(监听);高清用户id = envvars中获得(BUILD_USER_ID')
高清节点名称= envvars中获得(NODE_NAME')
高清nodeOffpool = envvars中获得(NODE_GOING_OFFPOOL')ALLUSERS = User.getAll()
的println ALLUSERS
的println//如果不列入存在添加用户ID作为标签
对(在hudson.model.Hudson.instance.slaves从){
如果(slave.nodeName.equals(nodeOffpool)){ 高清labelList =(slave.getLabelString())。斯普利特()
的println labelList
//检查用户访问机
对(在labelList标签){
的println(User.get(标签))
的println(User.get(标签)在ALLUSERS)
如果(User.get(标签)在ALLUSERS){
如果(标签==用户id){
的println(此节点已经被分配给您($用户id))
}其他{
的println(此节点($ nodeOffpool)已经分配给某人($标签)一样,你现在不能使用它)
的println(请询问用户$标签释放节点($ nodeOffpool)为您($标签)运行)
}
返回
}
};
的println(前:+ slave.getLabelString())
//设置新的标签奴隶
字符串newLabel = slave.getLabelString()++用户id
slave.setLabelString(newLabel)
的println(后+ slave.getLabelString())
}
}
当我运行首次输出看起来不错
[用户1,用户2,SYSTEM,未知]
[TESTLAB3,TESTLAB4]
TESTLAB3
假
TESTLAB4
假
前:TESTLAB3 TESTLAB4
后:TESTLAB3 TESTLAB4 USER1
当我运行第二次
[用户1,用户2,系统的,未知的,TESTLAB3,TESTLAB4]
[TESTLAB3,TESTLAB4,USER1]
TESTLAB3
真正
这个节点(节点)已经分配给其他人(TESTLAB3)一样,你现在不能使用它
请询问用户TESTLAB3释放节点(节点)为您(TESTLAB3)运行
成品:成功
这是问题与詹金斯API。我使用的詹金斯1.573
相关的问题:
解决方案
我找到了答案通过试错。
User.get(标签)
添加标签的用户,如果它不存在默认情况下。
以prevent这个此外,我们不得不使用
User.get(标签,假的)
I have the following script under a JOB, which when run adds the userId to the label of the slave.
import jenkins.model.Jenkins
import hudson.model.User
import hudson.security.Permission
import hudson.EnvVars
EnvVars envVars = build.getEnvironment(listener);
def userId= envVars .get('BUILD_USER_ID')
def nodeName= envVars .get('NODE_NAME')
def nodeOffpool= envVars .get('NODE_GOING_OFFPOOL')
allUsers = User.getAll()
println allUsers
println ""
// add userid as a label if doesnot exist
for (slave in hudson.model.Hudson.instance.slaves) {
if( slave.nodeName.equals(nodeOffpool)) {
def labelList = (slave.getLabelString()).split()
println labelList
// check for user access to machine
for(label in labelList) {
println (User.get(label))
println (User.get(label) in allUsers)
if (User.get(label) in allUsers) {
if (label == userId) {
println ("This Node has already been assigned to you ($userId)")
} else {
println ("This Node($nodeOffpool) has already been assigned to someone($label) else, you cannot use it now")
println ("Please ask the user $label to release the Node($nodeOffpool) for you($label) to run")
}
return
}
};
println ("before: " + slave.getLabelString())
// setting the slave with new label
String newLabel = slave.getLabelString() + " " + userId
slave.setLabelString(newLabel)
println ("after: " + slave.getLabelString())
}
}
When i run for the first time output looks fine
[user1, user2, SYSTEM, unknown]
[TESTLAB3, TESTLAB4]
TESTLAB3
false
TESTLAB4
false
before: TESTLAB3 TESTLAB4
after: TESTLAB3 TESTLAB4 user1
When i run the second time
[user1, user2, SYSTEM, unknown, TESTLAB3, TESTLAB4]
[TESTLAB3, TESTLAB4, user1]
TESTLAB3
true
This Node(node1) has already been assigned to someone(TESTLAB3) else, you cannot use it now
Please ask the user TESTLAB3 to release the Node(node1) for you(TESTLAB3) to run
Finished: SUCCESS
Is this issue with Jenkins API. I am using Jenkins 1.573
related questions:
解决方案
I found out the answer by trail and error.
User.get(label)
adds the label as user if it doesnt exist by default. To prevent this addition, we have to use
User.get(label, false)
这篇关于詹金斯从API setLabelString添加到用户列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文