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

How to get hostname and IP address of an arbitrary jenkins node in a pipeline job

我有一个参数化的 jenkins 管道作业。唯一的参数是 Node 类型(命名为 myNode),其中我一直可用 jenkins 服务器的所有节点。

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

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

我尝试了很多选项,但我无法同时获得主机名和 IP 地址,而且根据从站是 windows 还是 linux,我也会得到不同的结果。 在我看来,因为詹金斯知道节点,所以它会很简单,但似乎不是。

我尝试过的:

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 地址。

提前致谢

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
    }
}