TechCraft – エンジニアのためのスキルアップメモ

エンジニアのスキルアップを少しでも加速する技術ブログ

PowerShellでJenkinsジョブの状態を監視する方法

PowerShellでJenkinsジョブの状態を監視する方法

1. はじめに

JenkinsはCI/CDパイプラインの自動化に広く使われるツールですが、ジョブの実行状態を定期的にチェックする必要があります。
本記事では、PowerShellを使ってJenkinsジョブの状態を監視し、成功・失敗を自動的に通知するスクリプトを作成します。

2. 必要な準備

PowerShellでJenkinsのAPIを利用するには、JenkinsのREST APIを有効にし、APIトークンを取得する必要があります。

2.1. APIトークンの取得

  1. Jenkinsにログイン
  2. 「ユーザー名」 → 「設定」 を開く
  3. APIトークンの管理」 に移動し、新しいトークンを作成
  4. 取得したトークンを控えておく

2.2. REST APIのエンドポイント

ジョブの最新ビルドの状態を取得するには、以下のURLを使用します。

http://JENKINS_URL/job/JOB_NAME/lastBuild/api/json

認証が必要な場合は、-Credential オプションを使うか、Invoke-WebRequestBasic認証を利用します。

3. PowerShellスクリプト

以下のPowerShellスクリプトを使うことで、Jenkinsジョブの状態を定期的に監視できます。

# Jenkinsの設定
$JenkinsUrl = "http://your-jenkins-url"
$JobName = "your-job-name"
$User = "your-username"
$ApiToken = "your-api-token"

# APIのURL
$ApiUrl = "$JenkinsUrl/job/$JobName/lastBuild/api/json"

# Basic認証の準備
$AuthHeader = @{
    Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$User`:$ApiToken"))
}

# ジョブの状態を取得する関数
function Get-JenkinsJobStatus {
    try {
        # APIリクエスト
        $response = Invoke-RestMethod -Uri $ApiUrl -Headers $AuthHeader -Method Get

        # ビルドの結果を取得
        $status = $response.result

        if ($status -eq $null) {
            Write-Output "ジョブは現在実行中です..."
        } elseif ($status -eq "SUCCESS") {
            Write-Output "ジョブは成功しました ✅"
        } elseif ($status -eq "FAILURE") {
            Write-Output "ジョブは失敗しました ❌"
        } else {
            Write-Output "ジョブの状態: $status"
        }
    } catch {
        Write-Output "エラーが発生しました: $_"
    }
}

# 監視ループ(10秒ごとにチェック)
while ($true) {
    Get-JenkinsJobStatus
    Start-Sleep -Seconds 10
}

4. スクリプトの実行

  1. PowerShellを開き、スクリプトwatch_jenkins.ps1 として保存
  2. 以下のコマンドで実行
powershell -ExecutionPolicy Bypass -File watch_jenkins.ps1

5. まとめ

本記事では、PowerShellを使ってJenkinsジョブの状態を定期的に監視する方法を解説しました。このスクリプトをタスクスケジューラやWindowsサービスとして実行することで、自動監視が可能になります。

次に学ぶべきトピック

  • ジョブの結果をSlackやメールで通知する
  • PowerShellを使ったJenkinsジョブのトリガー (Build Now 実行)
  • Webhookを活用したリアルタイム通知の設定

このスクリプトを活用して、Jenkinsの監視を効率化しましょう!