1. 概要

この記事では、Jenkinsを使用した継続的デリバリーの例を通じてパイプラインの使用法を紹介します。

サンプルプロジェクト用に、シンプルでありながら非常に便利なパイプラインを構築します。

  • コンパイル
  • 単純な静的分析(コンパイルと並行)
  • ユニットテスト
  • 統合テスト(単体テストと並行して)
  • 展開

2. ジェンキンスのセットアップ

まず、 Jenkins の最新の安定バージョン(この記事の執筆時点では2.73.3)をダウンロードする必要があります。

ファイルがあるフォルダーに移動し、 java -jarjenkins.warコマンドを使用して実行してみましょう。 ユーザーの初期設定なしではJenkinsを使用できないことに注意してください。

管理者が最初に生成したパスワードを使用してJenkinsのロックを解除した後、最初の管理者ユーザーのプロファイル情報を入力し、推奨されるすべてのプラグインをインストールする必要があります。

これで、Jenkinsの新規インストールを使用する準備が整いました。

Jenkinsの利用可能なすべてのバージョンは、ここにあります。

3. パイプライン

Jenkins 2には、 Pipelines と呼ばれる優れた機能が付属しています。これは、プロジェクトの継続的インテグレーション環境を定義する必要がある場合に非常に拡張可能です。

パイプラインは、コードを使用していくつかのJenkinsステップを定義し、ソフトウェアのデプロイプロセスを自動化するもう1つの方法です。

ドメイン固有言語(DSL)を2つの異なる構文で使用しています。

  • 宣言型パイプライン
  • スクリプト化されたパイプライン

この例では、Groovyで構築されたより命令型のプログラミングモデルに従ったスクリプトパイプラインを使用します。

Pipelineプラグインのいくつかの特徴を見てみましょう。

  • パイプラインはテキストファイルに書き込まれ、コードとして扱われます。 これは、バージョン管理に追加して後で変更できることを意味します
  • Jenkinsサーバーを再起動した後も残ります
  • オプションでパイプラインを一時停止できます
  • 並行して作業を実行するなどの複雑な要件をサポートします
  • Pipelineプラグインは、他のプラグインと拡張または統合することもできます

つまり、パイプラインプロジェクトを設定するということは、実行したいプロセスのいくつかのステップを順番に適用するスクリプトを作成することを意味します。

パイプラインの使用を開始するには、単純な自動化と複雑な自動化を作成できるパイプラインプラグインをインストールする必要があります。

オプションで、 Pipeline Stage View も使用できるため、ビルドを実行すると、構成したすべてのステージが表示されます。

4. 簡単な例

この例では、小さなSpring Bootアプリケーションを使用します。 次に、プロジェクトのクローンを作成し、プロジェクトをビルドしていくつかのテストを実行し、アプリケーションを実行するパイプラインを作成します。

Checkstyle、 Static Analysis Collector JUnit プラグインをインストールしてみましょう。これらはそれぞれ、 Checkstyle の結果を収集し、結合された分析グラフを作成するのに役立ちます。テストレポートの一部であり、正常に実行されたテストと失敗したテストを示しています。

まず、ここでCheckstyleの理由を理解しましょう。これは、プログラマーが受け入れられ、よく知られている標準に従って、より優れたJavaコードを作成するのに役立つ開発ツールです。

Static Analysis Collectorは、さまざまな分析出力を収集し、結果を組み合わせた傾向グラフに出力するアドオンです。 さらに、プラグインは、これらのグループ化された結果に基づいて、ヘルスレポートを提供し、安定性を構築します。

最後に、 JUnit プラグインは、ビルド中に生成されたXMLテストレポートを使用し、プロジェクトのテストに関連する詳細で意味のある情報を出力するパブリッシャーを提供します。

また、アプリケーションの pom.xml:Checkstyleを構成します。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.17</version>
</plugin>

5. パイプラインスクリプトの作成

まず、新しいJenkinsジョブを作成する必要があります。 このスクリーンショットで説明されているように、[OK]ボタンを押す前に、タイプとしてPipelineを選択してください。

次の画面では、説明トリガー、いくつかの高度なプロジェクトオプションなど、Jenkinsジョブのさまざまなステップの詳細を入力できます。

Pipeline タブをクリックして、この種の仕事の主要で最も重要な部分に飛び込みましょう。

次に、定義としてパイプラインスクリプトを選択し、GroovySandboxを使用します。をチェックします。

Unix環境で動作するスクリプトは次のとおりです。

node {
    stage 'Clone the project'
    git 'https://github.com/eugenp/tutorials.git'
  
    dir('spring-jenkins-pipeline') {
        stage("Compilation and Analysis") {
            parallel 'Compilation': {
                sh "./mvnw clean install -DskipTests"
            }, 'Static Analysis': {
                stage("Checkstyle") {
                    sh "./mvnw checkstyle:checkstyle"
                    
                    step([$class: 'CheckStylePublisher',
                      canRunOnFailed: true,
                      defaultEncoding: '',
                      healthy: '100',
                      pattern: '**/target/checkstyle-result.xml',
                      unHealthy: '90',
                      useStableBuildAsReference: true
                    ])
                }
            }
        }
        
        stage("Tests and Deployment") {
            parallel 'Unit tests': {
                stage("Runing unit tests") {
                    try {
                        sh "./mvnw test -Punit"
                    } catch(err) {
                        step([$class: 'JUnitResultArchiver', testResults: 
                          '**/target/surefire-reports/TEST-*UnitTest.xml'])
                        throw err
                    }
                   step([$class: 'JUnitResultArchiver', testResults: 
                     '**/target/surefire-reports/TEST-*UnitTest.xml'])
                }
            }, 'Integration tests': {
                stage("Runing integration tests") {
                    try {
                        sh "./mvnw test -Pintegration"
                    } catch(err) {
                        step([$class: 'JUnitResultArchiver', testResults: 
                          '**/target/surefire-reports/TEST-' 
                            + '*IntegrationTest.xml'])
                        throw err
                    }
                    step([$class: 'JUnitResultArchiver', testResults: 
                      '**/target/surefire-reports/TEST-' 
                        + '*IntegrationTest.xml'])
                }
            }
            
            stage("Staging") {
                sh "pid=\$(lsof -i:8989 -t); kill -TERM \$pid " 
                  + "|| kill -KILL \$pid"
                withEnv(['JENKINS_NODE_COOKIE=dontkill']) {
                    sh 'nohup ./mvnw spring-boot:run -Dserver.port=8989 &'
                }   
            }
        }
    }
}

まず、GitHubからリポジトリのクローンを作成し、次にディレクトリをspring-jenkins-pipelineというプロジェクトに変更します。

次に、プロジェクトをコンパイルし、Checkstyle分析を並行して適用します。

次の手順は、単体テストと統合テストの並列実行と、アプリのデプロイを表しています。

並列処理は、パイプラインを最適化し、ジョブをより高速に実行するために使用されます。 Jenkinsでは、時間がかかる可能性のあるいくつかの独立したアクションを同時に実行することをお勧めします。

たとえば、実際のプロジェクトでは、通常、多くのユニットテストと統合テストがあり、さらに時間がかかる場合があります。

いずれかのテストが失敗した場合、BUILDもFAILEDとしてマークされ、デプロイメントは発生しないことに注意してください。

また、 JENKINS_NODE_COOKIE を使用して、パイプラインが終了したときにアプリケーションがすぐにシャットダウンしないようにしています。

他の異なるシステムで動作するより一般的なスクリプトを確認するには、GitHubリポジトリを確認してください。

6. 分析レポート

ジョブを作成したら、スクリプトを保存して、Jenkinsダッシュボードのプロジェクトホームで BuildNowをクリックします。

ビルドの概要は次のとおりです。

もう少し下に、パイプラインのステージビューと各ステージの結果が表示されます。

ステージセルにカーソルを合わせ、 Logs ボタンをクリックして、そのステップで印刷されたログメッセージを表示すると、各出力にアクセスできます。

コード分析の詳細も確認できます。 右側のメニューのビルド履歴から目的のビルドをクリックして、CheckstyleWarningsを押してみましょう。

ここでは、クリックすることで閲覧可能な60の優先度の高い警告が表示されます。

詳細タブには、警告を強調する情報が表示され、開発者は警告の背後にある原因を理解できます。

同様に、テスト結果リンクをクリックすると、完全なテストレポートにアクセスできます。 com.baeldungパッケージの結果を見てみましょう。

ここでは、各テストファイルとその期間およびステータスを確認できます。

7. 結論

この記事では、 Pipeline ジョブを介してJenkinsで静的コード分析とテストレポートを実行および表示するための、単純な継続的デリバリー環境をセットアップしました。

いつものように、この記事のソースコードはGitHubにあります。