Jenkins 2の紹介とパイプラインの力
1概要
この記事では、https://jenkins.io/[Jenkins]を使用した連続配信の例を通して、パイプラインの使用方法を紹介します。
サンプルプロジェクト用に、シンプルでありながら非常に有用なパイプラインを構築します。
-
コンピレーション
-
単純な静的解析(コンパイルと並行)
-
ユニットテスト
-
統合テスト(単体テストと並行)
-
展開
2 Jenkins
の設定
まず最初に、https://jenkins.io/download/[Jenkins]の最新安定版(この記事を書いている時点で2.73.3)をダウンロードする必要があります。
ファイルがあるフォルダに移動し、
java -jar jenkins.war
コマンドを使用して実行しましょう。初期のユーザー設定なしではJenkinsを使用できないことに注意してください。
初期管理者生成パスワードを使用してJenkinsのロックを解除した後、最初の管理者ユーザのプロファイル情報を入力し、必ずすべての推奨プラグインをインストールする必要があります。
リンク:/uploads/jenkins1-768×485.png%20768w[]
これで、Jenkinsの新しいインストールを使用する準備が整いました。
リンク:/uploads/jenkins2-1024×534.png%201024w[]
Jenkinsのすべての利用可能なバージョンはhttp://mirrors.jenkins.io/war-stable/2.73.1/[ここ]にあります。
3パイプライン
Jenkins 2には
Pipelines
という素晴らしい機能が付属しています。これは、プロジェクトのための継続的な統合環境を定義する必要がある場合に非常に拡張性があります。
-
Pipelineは、コードを使用してJenkinsのステップを定義し、ソフトウェアをデプロイするプロセスを自動化するもう1つの方法です。
ドメイン固有言語(DSL)
を2つの異なる構文で使用します
-
宣言的パイプライン
-
スクリプトパイプライン
私たちの例では、Groovyで構築されたより命令型のプログラミングモデルに従った
Scripted Pipeline
を使用します。
Pipeline
プラグインのいくつかの特徴を見てみましょう。
-
パイプラインはテキストファイルに書き込まれ、コードとして扱われます。これの意味は
それらはバージョン管理に追加し、後で変更することができます。
** それらはJenkinsサーバの再起動後も残ります
-
オプションでパイプラインを一時停止することができます
-
作業を並行して実行するなどの複雑な要件をサポートします。
-
Pipelineプラグインは他のものと拡張または統合することもできます。
プラグイン
つまり、Pipelineプロジェクトを設定するということは、達成したいプロセスのいくつかのステップを順番に適用するスクリプトを書くことを意味します。
-
パイプラインの使用を開始するには、簡単で複雑な自動化を構成することができるhttps://wiki.jenkins.io/display/JENKINS/Pipelineプラグイン[Pipeline]プラグインをインストールする必要があります。
https://wiki.jenkins.io/display/JENKINS/Pipeline
Stage View Plugin[パイプラインステージビュー]もオプションで1つ用意できますので、ビルドを実行すると、設定したすべてのステージが表示されます。
4簡単な例
この例では、小さなSpring Bootアプリケーションを使用します。次に、プロジェクトを複製し、それをビルドして複数のテストを実行してからアプリケーションを実行するパイプラインを作成します。
Checkstyle
、
Static
Analysis
Collector
をインストールしましょう。
https://wiki.jenkins.io/display/JENKINS/JUnit
Plugin[
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
を選択してください。
リンク:/uploads/jenkins3-1024×526.png%201024w[]
次の画面では、
description
、
triggers
、いくつかの__詳細なプロジェクトオプションなど、Jenkinsの仕事のさまざまなステップの詳細を入力できます。
リンク:/uploads/jenkins4-1024×258.png%201024w[]
[パイプライン]タブをクリックして、この種の仕事の最も重要な部分に飛び込みましょう。
次に、定義として
Pipeline script
を選択し、__Use Groovy Sandboxをチェックします。
これが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と呼びます。
次に、プロジェクトをコンパイルして、並行してチェックスタイル分析を適用します。
次の手順では、単体テストと統合テストを並行して実行してから、アプリをデプロイします。
-
並列処理は、パイプラインを最適化し、ジョブの実行速度を上げるために使用されます。** Jenkinsでは、長時間かかる独立したアクションを同時に実行することをお勧めします。
たとえば、実際のプロジェクトでは、通常、もっと時間がかかることがある単体テストおよび統合テストが多数あります。
いずれかのテストが失敗した場合、BUILDもFAILEDとマークされ、配置は行われません。
また、パイプラインが最後に到達したときにアプリケーションがすぐにシャットダウンされないように、
JENKINS
NODE
COOKIE
を使用しています。
より一般的なスクリプトが他の異なるシステムで動作するのを見るためには、https://github.com/eugenp/tutorials/blob/master/spring-jenkins-pipeline/scripted-pipeline-unix-nonunix[GitHub repository]を調べてください。
6. 分析レポート
仕事を作成したら、スクリプトを保存し、Jenkinsダッシュボードのプロジェクトホームで[今すぐ購入]をクリックします。
これがビルドの概要です。
リンク:/uploads/jenkins5-1024×516.png%201024w[]
もう少し下に進むと、パイプラインのステージビューが各ステージの結果とともに表示されます。
リンク:/uploads/jenkins6-768×276.png%20768w[]
各出力は、ステージセルの上にマウスを移動して
Logs
ボタンをクリックすると、そのステップで出力されたログメッセージを確認できます。
コード分析の詳細も見つかります。右側のメニューの[ビルド履歴]から目的のビルドをクリックし、[チェックスタイルの警告]をクリックします。
こちらをクリックすると、60の優先度の高い警告が表示されます。
リンク:/uploads/jenkins7-1024×530.png%201024w[]
[詳細]タブには、警告を強調し、開発者が警告の原因を理解できるようにするための情報が表示されます。
同様に、[Test Result]リンクをクリックすると、完全なテストレポートにアクセスできます。
com.baeldung
パッケージの結果を見てみましょう。
リンク:/uploads/jenkins8-1024×303.png%201024w[]
ここでは、各テストファイルとその期間とステータスを確認できます。
7. 結論
この記事では、
Pipeline
ジョブを介して、Jenkinsで静的コード分析とテストレポートを実行して表示するための単純な連続配信環境をセットアップしました。
いつものように、この記事のソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-jenkins-pipeline[over on GitHub]にあります。