必須のJenkinsプラグイン:選択と設定ガイド

パイプライン、SCM、ビルド、テスト、通知、認証情報のために、必須のJenkinsプラグインを選択して設定します。

必須のJenkinsプラグイン:選択と設定ガイド

Jenkinsプラグインは、CI/CDサーバーを便利にも脆弱にもします。難しいのはプラグインを見つけることではなく、ジョブに実際に必要な少数のJenkinsプラグインを選択し、それらをメンテナンスし続けることです。

このガイドでは、一般的なプラグインカテゴリ、実践的な例、およびプラグインが多くインストールされたJenkinsインストールをアップグレードしにくくしないためのメンテナンス習慣について説明します。

Jenkinsプラグインエコシステムの理解

Jenkinsプラグインエコシステムは広大で、常に進化しています。プラグインはJenkinsコミュニティによって開発・保守されており、機能に基づいて分類できます。

  • ビルドツール統合: Maven、Gradle、Antなどのビルドツールと統合するためのプラグイン。
  • ソースコード管理(SCM)統合: Git、Subversion、MercurialなどのSCMシステムに接続するためのプラグイン。
  • テストフレームワーク: さまざまな種類のテスト(ユニット、統合、セキュリティなど)を実行し、レポートするためのプラグイン。
  • デプロイ&リリースツール: アプリケーションをさまざまな環境(Docker、Kubernetes、クラウドプラットフォームなど)にデプロイするためのプラグイン。
  • 通知&レポート: ビルドステータス通知(メール、Slackなど)を送信し、レポートを生成するためのプラグイン。
  • パイプライン拡張: Jenkinsパイプラインに機能を追加するプラグイン。例:Pipeline as Code(Jenkinsfile)の可視化や共有ライブラリ。
  • セキュリティ&アクセス制御: Jenkinsのセキュリティを強化し、ユーザー権限を管理するためのプラグイン。
  • 監視&パフォーマンス: Jenkins自体を監視するためのプラグイン。

プラグインのインストールと管理

特定のプラグインに飛び込む前に、Jenkins内でプラグインをインストールおよび管理する基本的なプロセスを理解することが重要です。

プラグインマネージャーへのアクセス

  1. Jenkinsダッシュボードに移動します。
  2. 左側のメニューでJenkinsの管理をクリックします。
  3. プラグインの管理を選択します。

プラグインのインストール

プラグインの管理ページには、いくつかのタブがあります。

  • アップデート: インストール済みプラグインの利用可能なアップデートを一覧表示します。
  • 利用可能: Jenkinsアップデートセンターからインストール可能なすべてのプラグインを表示します。
  • インストール済み: Jenkinsインスタンスに現在インストールされているプラグインを表示します。
  • 高度な設定: アップデートセンターの設定、プラグインインストールの管理、プラグインファイルのアップロードのオプションを提供します。

新しいプラグインをインストールするには:

  1. 利用可能タブに移動します。
  2. 名前またはキーワードで目的のプラグインを検索します。
  3. インストールするプラグインの横にあるチェックボックスを選択します。
  4. ページ下部の再起動せずにインストールまたはダウンロードして再起動後にインストールボタンをクリックします。

ヒント: ほとんどのプラグインでは、再起動せずにインストールで十分であり、Jenkinsがバックグラウンドで自動的にダウンロードしてインストールします。プラグインが有効になるためにJenkinsの再起動が必要な場合は、2番目のオプションを使用します。

プラグインの更新と削除

  • 更新: アップデートタブで、更新したいプラグインを選択し、選択したパッケージをアップグレードをクリックします。または、すべてアップグレードをクリックします。
  • 削除: インストール済みタブで、削除したいプラグインの横にあるチェックボックスを選択し、アンインストールをクリックします。

警告: プラグインを削除すると、それに依存する既存のジョブが壊れる可能性があります。重要なプラグイン管理タスクを実行する前に、必ずJenkins設定をバックアップしてください。

一般的なCI/CDシナリオのための必須プラグイン

以下は、典型的なユースケースごとに分類された必須プラグインです。

1. Pipeline as Codeとワークフロー管理

Jenkins Pipelineは、CI/CDパイプラインをコードとして(通常はJenkinsfileで)定義できる強力なプラグインです。これにより、バージョン管理、再利用性、パイプラインの可視性が向上します。

  • Pipeline: パイプラインジョブを有効にするコアプラグイン。通常、最新のJenkinsインストールではデフォルトでインストールされています。
  • Pipeline: Declarative Pipeline: より構造化された意見のある構文でJenkinsfile構文を強化します。新しいパイプラインには強くお勧めします。
  • Pipeline: Script Security: パイプラインジョブで使用されるGroovyスクリプトを管理し、セキュリティ上の理由からスクリプトを承認または拒否できます。
  • Pipeline Utility Steps: readJSONwriteJSONzipunzipfileExistsなど、パイプラインスクリプトに役立つステップを提供します。

設定例(Jenkinsfile - 宣言的パイプライン):

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...' // 例のステップ
                // ここにビルドコマンドを追加(例:mvn clean install)
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...' // 例のステップ
                // ここにテストコマンドを追加(例:mvn test)
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...' // 例のステップ
                // ここにデプロイメントコマンドを追加
            }
        }
    }
    post {
        always {
            echo 'Pipeline finished.'
        }
        success {
            echo 'Pipeline succeeded!'
        }
        failure {
            echo 'Pipeline failed.'
        }
    }
}

2. ソースコード管理(SCM)統合

ビルドをトリガーし、コードを取得するために、JenkinsはSCMシステムと統合する必要があります。

  • Git Plugin: Gitリポジトリとの統合に必須。Git SCMポーリング、コードのチェックアウトなどをサポートします。
  • Subversion Plugin: まだSubversionを使用しているチーム向け。

設定例(パイプラインでのGit):

stage('Checkout') {
    steps {
        git branch: 'main', url: 'https://github.com/your-username/your-repo.git'
    }
}

3. ビルドツールと環境

これらのプラグインは、Jenkinsがさまざまなテクノロジーのビルドを管理および実行するのに役立ちます。

  • Maven Integration plugin: Mavenを使用するプロジェクト向け。Mavenバージョンとゴールの設定が可能。
  • Gradle Plugin: Gradleを使用するプロジェクト向け。
  • NodeJS Plugin: Jenkinsエージェント上で異なるNode.jsバージョンを簡単にインストールおよび切り替えることができます。

設定例(パイプラインでのNodeJSプラグイン):

pipeline {
    agent any
    tools {
        nodejs 'NodeJS 18.x' // グローバルツール設定で設定された名前
    }
    stages {
        stage('Install Dependencies') {
            steps {
                sh 'npm install'
            }
        }
        stage('Build Frontend') {
            steps {
                sh 'npm run build'
            }
        }
    }
}

NodeJSやMavenなどのツールを設定するには:

  1. Jenkinsの管理 -> グローバルツール設定に移動します。
  2. 関連するツール(例:NodeJS)を見つけます。
  3. NodeJSの追加をクリックし、インストール方法(例:自動インストール)とバージョンを設定します。
  4. 説明的な名前(例:NodeJS 18.x)を付け、Jenkinsfileで参照します。

4. テストとレポート

テスト結果を可視化することは、コード品質を理解し、リグレッションを特定するために重要です。

  • JUnit Plugin: JUnit XML形式のテスト結果を解析して表示します。ほとんどのテストフレームワークはこの形式を生成できます。
  • Cobertura Plugin / JaCoCo Plugin: コードカバレッジレポート用(Javaビルドツールに依存)。

設定例(パイプラインでのJUnit):

stage('Test') {
    steps {
        // テストがtarget/surefire-reports/に結果を生成すると仮定
        junit 'target/surefire-reports/**/*.xml'
    }
}

これを機能させるには:

  1. ビルドツール(例:Maven Surefireプラグイン)がJUnit XMLレポートを出力するように設定されていることを確認します。
  2. テスト実行後にjunitステップをパイプラインに追加します。

5. 通知とコミュニケーション

チームにビルドステータスを通知することは重要です。

  • Email Extension Plugin: 柔軟なメール通知機能を提供します。
  • Slack Notification Plugin: JenkinsビルドをSlackチャンネルと統合します。
  • Microsoft Teams Notification Plugin: Microsoft Teams向けの同様の統合。

設定例(パイプラインでのSlack通知):

まず、Jenkinsの管理 -> システムの設定でSlack統合を設定します。Slackアプリ統合トークンが必要です。

post {
    success {
        slackSend channel: '#ci-cd', message: 'Build #${env.BUILD_NUMBER} succeeded! - ${env.JOB_NAME}'
    }
    failure {
        slackSend channel: '#ci-cd', color: 'danger', message: 'Build #${env.BUILD_NUMBER} failed! Check logs: ${env.BUILD_URL}'
    }
}

6. アーティファクト管理とアーカイブ

後で使用したり検査したりするために、ビルド出力(アーティファクト)を保存します。

  • Archive the Artifacts: ビルドで生成されたファイルをアーカイブするための組み込みJenkinsステップ。

設定例(パイプラインでのアーティファクトアーカイブ):

stage('Archive Artifacts') {
    steps {
        archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
    }
}

このステップは、targetディレクトリにあるすべての.jarファイルをアーカイブし、フィンガープリントを有効にします。これにより、ビルドやジョブ間でのアーティファクトの使用状況を追跡できます。

7. セキュリティと認証情報管理

パスワード、APIキー、SSH秘密鍵などの機密情報を安全に管理することは最も重要です。

  • Credentials Plugin: 認証情報を管理するための標準プラグイン。さまざまなタイプの認証情報(ユーザー名/パスワード、SSHキー、トークンなど)を提供します。
  • Credentials Binding Plugin: 認証情報をビルドステップ内の環境変数やファイルにバインドできるようにし、機密データがログに公開されないようにします。

設定例(パイプラインでの認証情報の使用):

  1. 認証情報の追加: Jenkinsの管理 -> 認証情報の管理に移動します。Jenkinsにスコープされたストアで、(global)ドメインをクリックします。認証情報の追加をクリックします。タイプ(例:「ユーザー名とパスワード」)を選択し、詳細を入力し、ID(例:my-docker-registry-creds)を付けます。

  2. パイプラインでの使用:

    stage('Push to Docker Registry') {
        steps {
            withCredentials([usernamePassword(credentialsId: 'my-docker-registry-creds', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
                sh 'printf "%s" "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin'
                sh 'docker push my-registry/my-image:latest'
            }
        }
    }
    

プラグイン管理のベストプラクティス

  • 最小限に保つ: 実際に必要なプラグインのみをインストールします。各プラグインはオーバーヘッドを追加します。
  • 定期的にレビュー: インストール済みプラグインを定期的に確認します。使用されていない、または冗長なプラグインは削除します。
  • 迅速に更新: バグ修正、セキュリティパッチ、新機能の恩恵を受けるために、プラグインを最新の状態に保ちます。ただし、可能であればステージングJenkinsインスタンスで更新をテストします。
  • 互換性を確認: 新しいプラグインをインストールする前に、そのドキュメントでJenkinsバージョンや他の重要なプラグインとの互換性を確認します。
  • 依存関係を理解: 一部のプラグインは他のプラグインに依存しています。プラグインマネージャーは通常これを処理しますが、潜在的な競合に注意してください。
  • セキュリティ第一: 信頼できないソースからのプラグインのインストールには注意してください。公式のJenkinsアップデートセンターまたは信頼できるソースからのプラグインのみを使用します。

重要なポイント

実際のワークフローをサポートするプラグイン(パイプライン、SCM、ビルドツール、テストレポート、通知、認証情報)から始めましょう。インストールする前にプラグインの健全性を確認し、可能であれば本番環境から離れて更新をテストし、アクティブなジョブで使用されていないプラグインは削除します。