詹金斯从API setLabelString添加到用户列表 [英] jenkins Slave API setLabelString adds to User list

查看:212
本文介绍了詹金斯从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

相关的问题:


  1. How使用Groovy脚本来识别詹金斯管理员

  2. 詹金斯更改标签的要求


解决方案

我找到了答案通过试错。

  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:

  1. How to identify admins on Jenkins using groovy scripts
  2. jenkins change label as requested

解决方案

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆