groovy 如何在管道作业中获取任意jenkins节点的主机名和IP地址

ztyzrc3y  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(326)

我有一个参数化的jenkins管道作业,唯一的参数是Node类型(名为myNode),在这里我总是可以使用jenkins服务器的所有节点。

在我的groovy管道中,我想设置两个变量:

- hostname of the node (myNode)
 - IP address of the node (myNode)

我尝试了很多选项,但我不能同时获得主机名和IP地址,而且我还得到了不同的结果,这取决于从站是windows还是linux。在我看来,因为jenkins知道节点,这将是简单的事情,但似乎不是。
我尝试过的方法:

def find_ip(node_name){
    for (slave in Jenkins.instance.slaves) {
        host = slave.computer.hostName
        addr = InetAddress.getAllByName(host)
        if (! slave.name.trim().equals(node_name.trim())) { continue }
        String rawIpAddress = addr[0]
        ipAddress = rawIpAddress.substring(rawIpAddress.lastIndexOf("/") + 1)
        print "ipAddress: " + ipAddress

        return host
    }
}

node('master') {
    stage('stage1') {
        println "hostname: " + find_ip(env.myNode)
    }
}

如果slave是windows,我会得到主机名和IP地址,如果是linux,我会得到这两个字段的IP地址。
先谢谢你

7tofc5zh

7tofc5zh1#

def find_ip(node_name){
    def node = Jenkins.instance.slaves.find{it.name.trim()==node_name.trim()}
    if(node) {
        def addr = InetAddress.getByName(node.computer.hostName)
        def ip = addr.getHostAddress()
        def host = addr.getHostName()
        println "host=${host} ip=${ip}"
        return host
    }
}

相关问题