📘

JenkinsでNodeがオンラインかどうかを確認する方法

2024/07/03に公開

概要

  • JenkinsのNodeが時々勝手に途切れてオフラインになることがある
  • オフラインを検知して再起動や通知をしたい
  • そのための検知方法がないか調べた

内容

RestAPIを使用する方法

以下のようにnodeのJson情報を取ってきてjqで要素だけ取ってくるのがいい

curl --silent $JENKINS_URL/computer/$JENKINS_NODENAME/api/json | jq .offline

返ってくるJsonは以下記事が参考になる。
https://qiita.com/tamikura@github/items/033ab9180561b6232509

また認証が必要な場合は-uオプションでユーザ名とAPIトークンを付与するといい。

JenkinsCLIではだめ

JenkinsCLIで該当のものがないか調べてみたがオンラインかどうかをピンポイントで取得するものはなさそう?(多分)
「Jenkinsをオンライン(またはオフライン)にする」といったコマンドや「JenkinsNodeを再接続する」というコマンドは与えられる。このあたりを使えば再接続するといったことは可能かもしれないが未検証。

https://www.jenkins.io/doc/book/managing/cli/

実行で失敗取ればいいんじゃない?

実行してみて失敗内容を読み取ればDisconnect読み取れるんじゃない?というラジカルな方法もありそう。以下コード転記する。

online_nodes = nodesByLabel label: "jenkins-slave-3", offline: false
if (online_nodes) {
    echo "online"
} else {
    echo "offline"
}

参考リンク

https://stackoverflow.com/questions/50445543/check-if-jenkins-node-is-online-for-the-job-otherwise-send-email-alert

Discussion