背景
Jenkinsをmaster/slave構成にした際に、masterノードからはslaveノードのIPアドレスを知ることができません。
slaveノードをメンテナンスしたい場合などに、IPアドレスが即座にわからないのは不便です。
(「Jenkinsの管理」 > 「ノードの管理」 のノードの一覧に、IPアドレスが表示されていても良さそうですが)
方法1 特定のノードのIPアドレスを調べる
- 「Jenkinsの管理」 > 「ノードの管理」 からIPアドレスを知りたいノードを選択する。
- 「ログ」を選択する。
- ログの先頭の方にIPアドレスが表示されているはずです。
表示形式はノードの接続方法によって異なります。
- Jnlp(Java Web Start)接続のノードでは、
Inbound agent connected from xxx.xxx.xxx.xxx ...
- SSH接続のノードでは、
SSHLauncher{host='xxx.xxx.xxx.xx' ...
方法2 全ノードのIPアドレスを一覧出力する
「Jenkinsの管理」 > 「スクリプトコンソール」 (masterノードのスクリプトコンソール) から、次のスクリプトを実行します。
※結果はJenkinsコンソール上に表示されます。コンソールがごちゃごちゃするのを避けるため return null
としています。
jenkins.model.Jenkins.get()?.getNodes().each { node ->
println "${node.getNodeName()} => ${node.getChannel()?.call(new hudson.model.Computer.ListPossibleNames())}"
}
return null
ノード名 => [xxx.xxx.xxx.xxx]
形式で出力されます。
※Slaveが複数のIPアドレスを持つ場合は、全てのIPアドレスが表示されます。
同じようにラベルを得ることもできます
// ノードのラベルを取得する
jenkins.model.Jenkins.get().getNodes().each { node ->
println "${node.getNodeName()} => ${node.getAssignedLabels() - node.getSelfLabel()}"
}
return null
// ノードのラベルとIPアドレスを合わせて取得する
jenkins.model.Jenkins.get().getNodes().each { node ->
println "${node.getNodeName()} => label:${node.getAssignedLabels() - node.getSelfLabel()}, IP:${node.getChannel()?.call(new hudson.model.Computer.ListPossibleNames())}"
}
return null
参考
こちらの記事を参考にしました。
https://stackoverflow.com/questions/14930329/finding-ip-of-a-jenkins-node
環境
Jenkins 2.282 で確認しています。