JenkinsパイプラインでCI環境を構築する

前回の記事でJenkinsのフリースタイルジョブを利用して、ビルドとJtestによる静的解析を実行するCI環境の構築方法を紹介しました。今回は、Jenkinsパイプラインを利用してCI環境を構築する方法を紹介します。

過去の関連記事

 

パイプラインとは

JenkinsのジョブをGroovyベースのDSL(ドメイン固有言語)のコードで定義します。フリースタイルジョブとは違い、GUIで定義する必要がなく下記のようなメリットがあります。

  • ジョブをコードで定義するためSCMでバージョン管理することが可能
  • 条件分岐や並列処理などの複雑なフローを実現可能
  • ジョブ実行中にJenkinsが再起動されてもジョブは実行を続ける耐久性

パイプラインでCI環境構築

前回と同様にソースコードのコミットによりビルドとJtestによる静的解析が自動実行され、結果をDTPから確認できる環境を構築します。対象のプロジェクトはGitで管理されているMavenのJavaプロジェクトです。
前提として、JenkinsとJtest/DTPがセットアップ済みである必要があります。

1. パイプラインの作成

パイプラインを Jenkinsfile というファイルにコードで定義します。MavenによるビルドとJtestによる静的解析を実行するコードを作成します。

pipeline {
  agent any

  stages {
    stage('ビルド') {
      steps {
        bat "mvn clean install"
      }
    }
    stage('静的解析') {
      steps {
        bat "mvn jtest:jtest -Djtest.settings=localsettings.properties"
      }
    }
  }
}

stageは実行するタスクをまとめるもので、ビルドと静的解析のために2つのstageを作成します。stage内のstepsで実際に実行するタスクであるビルドコマンドと静的解析コマンドを書きます。
パイプラインの詳細については、Jenkinsのドキュメントを参照ください。
https://www.jenkins.io/doc/book/pipeline/

 

2. Jtestの設定ファイルの作成

Jtestの設定ファイル jtest_settings.properties を作成します。コンソール出力の冗長性、静的解析に利用するルールセット、その他ツールとの連携設定を定義します。

# コンソール出力の冗長性
console.verbosity.level=high

# 静的解析のルールセット
jtest.configuration=builtin://Recommended Rules

# DTP連携
dtp.url=https://<DTPサーバー>:8443
dtp.user=admin
dtp.password=admin
dtp.project=demo
report.dtp.publish=true

# Git連携
report.scontrol=full
scope.scontrol=true
scontrol.rep1.type=git
scontrol.rep1.git.url=${GIT_URL}
scontrol.rep1.git.workspace=${WORKSPACE}

JtestとDTPを連携することで、Jtestの解析結果をDTPへ登録します。また、JtestとGitを連携することで、違反の担当者をGitのコミッターから算出して自動で割り当てます。違反の担当者は、DTPのダッシュボードから確認できます。

 

3. パイプラインとJtestの設定ファイルのコミット

作成した Jenkinsfile と jtest_settings.properties をCIの対象リポジトリのルートにコミットします。

 

4. パイプラインジョブの作成と実行

Jenkinsにログインして [新規ジョブ作成] を選択し、ジョブ名を入力、[Multibranch Pipeline] をクリックしてジョブを作成します。

Multibranch Pipeline は、対象リポジトリをスキャンして Jenkinsfile が含まれるブランチを検知すると対応するジョブを自動で作成して管理します。これによりブランチ毎に手動でジョブを作成したり、ブランチを削除した時に手動でジョブを削除する必要がなくなります。

Multibranch Pipelineジョブを作成したら以下を設定します。

  • Branch Source:対象リポジトリのURLと認証情報を設定
  • Scan Multibranch Pipeline Triggers:Jenkinsが対象リポジトリをスキャンする間隔を設定

設定を保存すると、Jenkinsがリポジトリをスキャンして、リポジトリのルートにJenkinsfileが配置されているブランチを検出して自動でジョブを作成/実行します。

結果はJenkinsfileで定義したステージ毎にグラフィカルに表示されます。

以降は、設定した間隔でリポジトリが定期的にスキャンされ、新しくコミットがされたブランチがあれば自動で対応するジョブが実行されます。また、Jenkinsfileがルートに配置されているブランチが新しく検知されると対応するジョブを自動で作成し、逆にブランチが削除されると自動でジョブが削除されます。

 

5. 静的解析の結果確認

Jtestの解析結果はDTPへ登録するのように設定しているため、DTPのダッシュボードから結果を確認することができ、フィルター機能を利用するとブランチ毎に解析結果を表示できます。

 

まとめ

今回はJenkinsパイプラインとJtest、DTPを利用したCI環境の構築方法を紹介しました。パイプラインには様々メリットがあり、フリースタイルジョブでは実現できなかった複雑なフローの自動化や、CI環境の管理の手間を削減したりすることができます。ご興味がある方は試してみてはいかがでしょうか。

Jenkinsのパイプラインについては、弊社でトレーニングを実施していますので、ぜひご受講ください。
https://cloudbees.techmatrix.jp/jenkins-training/

Parasoft Jtestについて

Java対応静的解析・単体テストツール Parasoft Jtest

Jtestは、テスト工数の大幅削減とセキュアで高品質なJavaシステムの開発を強力にサポートするJava対応テストツールです。2,000個以上のコーディング規約をもとにソースコードを静的に解析し、プログラムの問題点や処理フローに潜む検出困難なエラーを検出します。さらに、JUnitを用いた単体テストについて、作成、実行、テストカバレッジ分析、テスト資産の管理といった単体テストに係る作業をサポートし、単体テストの効率化を促進します。

Top