如何将 jenkins 节点列表添加到 Active choice 参数并仅显示当前登录用户的节点

ari*_*lma 3 groovy jenkins jenkins-plugins

我有 Jenkins 工作,其主动选择参数的名称为“计算机”。我应该编写哪一个常规脚本来为我提供所有节点名称,并仅显示当前登录用户的节点名称?所有节点都带有标签“Desktop”。我尝试了以下方法,但它不起作用:

import hudson.slaves.DumbSlave

def users = []
for (DumbSlave it : Hudson.instance.getSlaves()) {
  if(it.getLabelString().contains("Desktop")) {
    def currAgent = it?.computer?.name
    if(currAgent != null) {
      users.add(currAgent)
     }
  }
}

return users
Run Code Online (Sandbox Code Playgroud)

更新(登录用户的完整答案,基于以下答案):

import jenkins.model.*
import hudson.model.User


def users = []
Jenkins.instance.nodes.each { node ->
  if(node.labelString.contains("Desktop")) {
    def currAgent = node?.computer
    def currAgentName = node?.computer?.name
    if(currAgentName != null) {
      def user = currAgent.systemProperties['user.name']?.toLowerCase()
      if (!users.contains(user) && user==User.current().toString()){
        users.add(currAgentName)
      }
    }
  }
}

return users
Run Code Online (Sandbox Code Playgroud)

Tid*_*ach 5

尝试这个:

import jenkins.model.*

def users = []
Jenkins.instance.nodes.each { node ->
    if(node.labelString.contains("Desktop")) {
        def currAgent = node?.computer?.name
        if(currAgent != null) {
            users.add(currAgent)
        }
    }
 }

 return users
Run Code Online (Sandbox Code Playgroud)

或者让它变得更加 Groovyer:

import jenkins.model.*

return Jenkins.instance.nodes.findAll { node ->
   node.labelString.contains("Desktop") &&
     node.computer.systemProperties["user.name"] == User.current().toString()
                                      }.collect { node ->
                                          node?.computer?.name }
Run Code Online (Sandbox Code Playgroud)