如何在管道作业中获取任意 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
}
}
我有一个参数化的 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
}
}