Jenkins 2とパイプラインのパワーの紹介
1. 概要
この記事では、Jenkinsを使用した継続的デリバリーの例を通じて、パイプラインの使用法を紹介します。
サンプルプロジェクト用に、シンプルでありながら非常に便利なパイプラインを構築します。
-
編集
-
単純な静的解析(コンパイルと並行)
-
単体テスト
-
統合テスト(単体テストと並行)
-
展開
2. Jenkinsのセットアップ
まず、最新の安定バージョンのJenkins(この記事の執筆時点では2.73.3)をダウンロードする必要があります。
ファイルがあるフォルダーに移動し、java -jar jenkins.warコマンドを使用して実行してみましょう。 Keep in mind that we can’t use Jenkins without an initial users setup.
初期管理者が生成したパスワードを使用してJenkinsのロックを解除した後、最初の管理者ユーザーのプロファイル情報を入力し、すべての推奨プラグインをインストールする必要があります。
これで、使用可能なJenkinsの新規インストールができました。
Jenkinsの利用可能なすべてのバージョンはhereで見つけることができます。
3. パイプライン
Jenkins 2には、Pipelinesと呼ばれる優れた機能が付属しています。これは、プロジェクトの継続的インテグレーション環境を定義する必要がある場合に非常に拡張可能です。
A Pipeline is another way of defining some Jenkins steps using code、およびソフトウェアの展開プロセスを自動化します。
2つの異なる構文でDomain Specific Language(DSL)を使用しています。
-
宣言的パイプライン
-
スクリプト化されたパイプライン
この例では、the Scripted Pipeline which is following a more imperative programming model built with Groovyを使用します。
Pipelineプラグインのいくつかの特徴を見てみましょう。
-
パイプラインはテキストファイルに書き込まれ、コードとして扱われます。これは、バージョン管理に追加し、後で変更できることを意味します
-
Jenkinsサーバーの再起動後も残ります
-
オプションでパイプラインを一時停止できます
-
並行して作業を実行するなどの複雑な要件をサポートします
-
Pipelineプラグインは、他のプラグインと拡張または統合することもできます
つまり、Pipelineプロジェクトを設定するということは、達成したいプロセスのいくつかのステップを順番に適用するスクリプトを書くことを意味します。
単純および複雑な自動化の作成を可能にするTo start using pipelines we have to install the Pipeline plugin。
オプションでPipeline Stage Viewを設定して、ビルドを実行するときに、構成したすべてのステージが表示されるようにすることもできます。
4. 簡単な例
この例では、小さなSpringBootアプリケーションを使用します。 次に、プロジェクトのクローンを作成してビルドし、いくつかのテストを実行してから、アプリケーションを実行するパイプラインを作成します。
*https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin[Checkstyle],プラグインとJUnitプラグインをインストールしてみましょう。これらはそれぞれCheckstyleの結果を収集し、テストレポートの組み合わせ分析グラフを作成し、正常に実行されたテストと失敗したテストを示します。 。
まず、ここでCheckstyleの理由を理解しましょう。これは、プログラマーが受け入れられ、よく知られている標準に従って、より優れたJavaコードを作成するのに役立つ開発ツールです。
Static Analysis Collectorは、さまざまな分析出力を収集し、結果を組み合わせたトレンドグラフに出力するアドオンです。 さらに、プラグインは正常性レポートを提供し、これらのグループ化された結果に基づいて安定性を構築します。
最後に、JUnitプラグインは、ビルド中に生成されたXMLテストレポートを使用し、プロジェクトのテストに関連する詳細で意味のある情報を出力するパブリッシャーを提供します。
また、アプリケーションのpom.xml:でCheckstyleを構成します
org.apache.maven.plugins
maven-checkstyle-plugin
2.17
5. パイプラインスクリプトの作成
まず、新しいJenkinsジョブを作成する必要があります。 このスクリーンショットで説明されているように、[OK]ボタンを押す前に、必ずタイプとしてPipelineを選択してください。
次の画面では、description、triggers、いくつかのadvanced project options:など、Jenkinsジョブのさまざまなステップの詳細を入力できます。
Pipelineタブをクリックして、この種のジョブの主要で最も重要な部分に飛び込みましょう。
次に、定義として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.と呼ばれます。
次に、プロジェクトをコンパイルし、Checkstyle分析を並行して適用します。
次の手順は、単体テストと統合テストの並列実行、そしてアプリの展開を表しています。
Parallelism is used to optimize the pipeline, and have the job runs faster. Jenkinsでは、時間がかかる可能性のあるいくつかの独立したアクションを同時に実行することをお勧めします。
たとえば、実際のプロジェクトでは、通常、より時間がかかる単体テストと統合テストが多数あります。
テストが失敗した場合、BUILDもFAILEDとマークされ、展開は行われないことに注意してください。
また、パイプラインが最後に達したときにアプリケーションがすぐにシャットダウンしないように、JENKINS_NODE_COOKIEを使用しています。
他の異なるシステムで動作するより一般的なスクリプトを確認するには、GitHub repositoryを確認してください。
6. 分析レポート
ジョブを作成したら、スクリプトを保存して、JenkinsダッシュボードのプロジェクトホームでBuild Nowを押します。
ビルドの概要は次のとおりです。
もう少し下に、パイプラインのステージビューと各ステージの結果が表示されます。
ステージセルにカーソルを合わせ、Logsボタンをクリックして、そのステップで出力されたログメッセージを表示すると、各出力にアクセスできます。
コード分析の詳細も確認できます。 右側のメニューのBuild Historyから目的のビルドをクリックして、Checkstyle Warnings.を押してみましょう。
ここでは、クリックして60個の優先度の高い警告が表示されます:
Detailsタブには、警告を強調表示し、開発者が警告の背後にある原因を理解できるようにする情報が表示されます。
同様に、Test Resultリンクをクリックすると、完全なテストレポートにアクセスできます。 com.exampleパッケージの結果を見てみましょう。
ここで、各テストファイルの期間とステータスを確認できます。
7. 結論
この記事では、Pipelineジョブを介してJenkinsで静的コード分析とテストレポートを実行および表示するための単純な継続的デリバリー環境をセットアップしました。
いつものように、この記事のソースコードはover on GitHubにあります。