jenkins - 如何将 Jenkins 节点列表添加到事件选择参数中,并只为当前登录用户显示这些节点

标签 jenkins groovy jenkins-plugins

我有 Jenkins 作业,它带有名为 Computer 的事件选择参数。 我应该编写哪个 groovy 脚本来获取所有节点名称,并且只为当前登录用户显示一个? 所有节点都带有标签 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

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

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

最佳答案

试试这个:

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

或者让它成为 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 }

关于jenkins - 如何将 Jenkins 节点列表添加到事件选择参数中,并只为当前登录用户显示这些节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69868185/

相关文章:

java - Jenkins 使用错误的 JUnit 版本

jenkins - 作业在新的 Jenkins View 中不可见

azure - 我可以从 Jenkins 触发 Azure DevOps 构建吗

jenkins - 如何限制用户访问我的 Jenkins 奴隶?

android - 将 build(apk) 上传到 hockeyApp 的管道脚本

grails findAll findAllWhere 不一致

spring - 在spring框架中使用JDBCTemplate

groovy - 如何使用 groovy mixin 添加静态方法

docker - 使用默认插件设置Docker Jenkins

jenkins - 在我的 Jenkins 配置部分安装 'Global Slack Notifier Setting' 后,部分 "Slack Notification Plugin"未显示