23

Jenkins パイプライン ジョブを作成していますが、特定のラベルが付いたすべてのノードでジョブを実行する必要があります。

したがって、特定のラベルが割り当てられたノード名のリストを取得しようとしています。(ノードを使用すると、ラベルを取得できますgetAssignedLabels())

nodesリストにjenkins.model.Jenkins.instance.nodesは、検索に含める必要があるマスターノードが含まれていないようです。

私の現在の解決策は、ノードを取得するためにメソッドを反復処理してjenkins.model.Jenkins.instance.computers使用することです。getNode()これは機能しますが、私が読んでいる Jenkins の javadoc では、このリストは最新ではない可能性があります。

長期的には、(動的に) クラウド ノードを追加しますが、その時点では使用できなくなるのではないかと心配していますcomputers

現在のすべてのノードのリストを取得する正しい方法は何ですか?

これは私が今していることです:

@NonCPS
def nodeNames(label) {
    def nodes = []
    jenkins.model.Jenkins.instance.computers.each { c ->
        if (c.node.labelString.contains(label)) {
            nodes.add(c.node.selfLabel.name)
        }
    }   
    return nodes
}
4

9 に答える 9

-2

これは、Jenkins サーバー上のノードを一覧表示する方法に関する Google のトップ ヒットの 1 つです。ノードのリストを探しているだけの場合は、次のサーバー URL で表示できます。

http://JENKINS_HOSTNAME:JENKINS_PORT/computer/

結果は、既知のノードの名前、OS、JVM バージョン、クロック同期ステータス、リモーティング バージョン、および応答時間を表示するテーブルです。また、ノード イメージ (つまり、JAR) が大幅に古くなっているかどうか、またはエラー/セキュリティ アラートの対象になっているかどうかも表示されます。

API 呼び出しにアクセスできない場合は、常に URL をスクレイピングおよび解析して、ノードのリストとテーブルに含まれるその他のデータを取得できます。

于 2021-06-09T18:14:47.943 に答える