1. 序章

この記事では、Jenkinsでジョブをスケジュールするさまざまな方法について説明します。

プレーンテキストメッセージを印刷するのと同じくらい簡単なことを実行する簡単なジョブをスケジュールすることから始めます。 そして、この例を進化させて、GitHub、BitbucketなどのSCMリポジトリの変更によって自動的にトリガーされるジョブをスケジュールします。

2. 初期設定

JDKとMavenは、JenkinsサーバーにそれぞれJDK9.0.1とMaven3.5.2という名前でグローバルツール構成にインストールされていると想定しています。

また、Mavenプロジェクトが適切に設定されたBitbucketなどのSCMリポジトリにアクセスできることを前提としています。

3. 簡単な仕事のスケジュール

ジョブ設定ページで、 BuildTriggersセクションまでまっすぐ下にスクロールしましょう。 簡単なジョブを作成するつもりなので、定期的にビルドとマークされたチェックボックスを選択しましょう。 このチェックボックスを選択するとすぐに、Scheduleラベルの付いたテキストボックスが表示されます。

Cron準拠の形式で値を提供する必要があります。 ボックスの横にある疑問符をクリックすると、ページに詳細な情報が表示されます。

ここに*/ 2 * * * * と入力します。これは、2分の間隔を表します。

 

テキストボックスからタブで移動すると、ボックスのすぐ下に情報が表示されます。 次にジョブがいつ実行されるかを示します。

ジョブを保存しましょう–約2分で、ジョブの最初の実行のステータスが表示されます。

2分ごとに実行するようにジョブを構成したため、しばらく待ってからジョブダッシュボードに戻ると、複数のビルド番号が表示されるはずです。

4. SCMをポーリングするジョブの作成

一歩進んで、BitbucketなどのSCMリポジトリからソースコードを取得してビルドを実行するジョブを作成しましょう。

前のセクションで説明したように、いくつかの変更を加えて、新しいジョブを作成しましょう。

ビルドトリガーセクションで、[定期的にビルド]を選択する代わりに、[PollSCM]を選択しましょう。 これを行うとすぐに、ラベルScheduleのテキストボックスが表示されます。

このボックスに*/ 5 * * * * と入力します。これは、ジョブが5分ごとに実行されるようにスケジュールすることを意味します。

ソースコード管理セクションまでスクロールしてみましょう。 Git の横にあるラジオボタンを選択すると、リポジトリというラベルの付いた新しいセクションが表示されます。

ここで、SCMリポジトリの詳細を構成する必要がありますリポジトリURLテキストフィールドにSCMリポジトリのURLを入力してみましょう。

また、Jenkinsがリポジトリにアクセスできるように、ユーザーの資格情報を提供する必要があります。

資格情報の横にある追加ボタンをクリックしてみましょう。これにより、ユーザー資格情報を作成するためのポップアップ画面が表示されます。

種類パスワード付きユーザー名として選択しましょう。 指定されたテキストフィールドにユーザー名とパスワードを入力する必要があります。

追加ボタンをクリックすると、ソースコード管理セクションに戻ります。

クレデンシャルの横のドロップダウンでこのユーザークレデンシャルを選択しましょう。

ここで、最後に行う必要があるのは、ビルドスクリプトを設定することです。

ビルドセクションまでスクロールダウンし、ビルドステップの追加をクリックして、シェルの実行を選択します。 SCMリポジトリでMavenプロジェクトに取り組んでいるため、 mvn clean installと入力する必要があります。これにより、Mavenビルドが実行されます。

ここで何をしたかを理解してみましょう。

5分ごとに実行するようにスケジュールされたジョブを作成しました。 指定されたBitbucketリポジトリのマスターブランチからソースコードをプルするようにジョブが構成されています

提供されたユーザー資格情報を使用してBitbucketにログインします。

ソースコードをプルした後、ジョブは提供されたMavenコマンドを含むスクリプトを実行します。

ここで、保存して約5分待つと、ジョブダッシュボードのビルド履歴セクションにビルドの実行が表示されます。

コンソール出力は、Mavenビルドの出力を表示する必要があります。 コンソール出力で、ソースコードがBitbucketからプルされ、コマンド mvn cleaninstallが実行されたことがわかります。

これはMavenビルドであるため、ダウンロードされるMaven依存関係の数によっては、コンソール出力が非常に長くなる可能性があります

ただし、出力の最後に、 BUILDSUCCESSメッセージが表示されます。

5. スクリプトとしてパイプラインを使用するジョブの作成

これまで、事前定義されたスケジュールされた時間に実行されるジョブを作成する方法を見てきました。

それでは、特定のスケジュールに縛られないジョブを作成しましょう。 代わりに、SCMリポジトリに新しいコミットがあるたびに自動的にトリガーされるように構成します。

Jenkinsダッシュボードに戻り、新しいアイテムをクリックしてみましょう。 今回は、フリースタイルプロジェクトの代わりに、パイプラインを選択します。 このジョブにPipelineAsScriptJob。という名前を付けましょう。

[OK]ボタンをクリックすると、パイプライン構成ページが表示されます。 このページには、「一般」、「ビルドトリガー」、「高度なプロジェクトオプション」、「パイプライン」などのセクションがあります。 。

ビルドトリガー」セクションまで下にスクロールし、変更がBitbucket にプッシュされたら、ビルドの横にあるチェックボックスを選択します。 このオプションは、Bitbucketプラグインをインストールした場合にのみ使用できます。

パイプラインセクションまでスクロールしてみましょう。 Definitionの横のドロップダウンでPipelineScriptを選択する必要があります。

このドロップダウンのすぐ下にあるテキストボックスは、スクリプトが配置されるのを待っています。 これを行うには2つの方法があります。

スクリプト全体を入力するか、パイプライン構文として知られるJenkinsが提供するユーティリティを利用できます。

2番目のオプションを選択しましょう:

パイプライン構文をクリックすると、上の図で強調表示されているように、ブラウザに新しいタブが開きます。 これは、実行したい操作を指定できる便利なユーティリティであり、ツールはGroovyでスクリプトを生成します。 次に、スクリプトをコピーしてパイプライン構成に貼り付けることができます。

サンプルステップドロップダウンでチェックアウト:一般SCMを選択しましょう。 SCMリポジトリのURLとユーザーの資格情報を入力したら、パイプラインスクリプトの生成ボタンをクリックする必要があります。

これにより、テキストボックスにスクリプトが生成されます。

このスクリプトをコピーして、後で使用できるようにどこかに保存してみましょう。

同じページで、上にスクロールして、サンプルステップドロップダウンで withMaven:Maven環境を提供を選択しましょう。 ここで、このオプションは、Pipeline MavenIntegrationPluginがインストールされている場合にのみ使用できることに注意してください

対応するドロップダウンの横にあるMavenおよびJDKインストールの名前を選択する必要があります。 パイプラインスクリプトの生成ボタンをクリックする必要があります。

これにより、テキストボックスにスクリプトが生成されます。

スクリプトを保存しましょう。

生成する必要のあるスクリプトはまだいくつかあります。 ノードを選択しましょう:サンプルステップドロップダウンでノードを割り当て、はラベルテキストでマスターと入力しますフィールドをクリックし、パイプラインスクリプトの生成をクリックします。

スクリプトを保存しましょう。

そして最後の1つ。

サンプルステップドロップダウンでステージ:ステージを選択し、ステージ名テキストフィールドに scm と入力して、をクリックします。パイプラインスクリプトの生成

保存しましょう。

これまでに生成されたすべてのスクリプトを照合し、それらをつなぎ合わせます。

node('master') {
    stage('scm') {
        checkout([$class: 'GitSCM', 
          branches: [[name: '*/master']], 
          doGenerateSubmoduleConfigurations: false, 
          extensions: [], 
          submoduleCfg: [], 
          userRemoteConfigs: [[credentialsId: 'e50f564f-fbb7-4660-9c95-52dc93fa26f7', 
          url: 'https://[email protected]/projects/springpocrepo.git']]])
    }

    stage('build') {
        withMaven(jdk: 'JDK9.0.1', maven: 'Maven3.5.2') {
            sh 'mvn clean install'
        }
    }
}

上記のスクリプトの最初のステートメントnode(’master’)は、Jenkinsサーバーのデフォルトノードであるmasterという名前のノードでジョブが実行されることを示しています。

上記のスクリプトをPipelineセクションのテキストボックスにコピーしてみましょう。

この構成を保存しましょう。

さて、取り残されているのは1つだけです。 BitbucketでWebhookを設定する必要があります。 Bitbucket で特定のイベントが発生するたびに、WebhookはJenkinsサーバーにプッシュ通知を送信する責任があります。

設定方法を見てみましょう。

Bitbucketにログインして、リポジトリを選択しましょう。 左側の列にオプション設定が表示されます。 それをクリックすると、WORKFLOWセクションにオプションWebhooksが表示されます。 新しいWebhookを作成しましょう。

TitleフィールドでこのWebhookに名前を付ける必要があります。 また、URLフィールドにWebhookのURLを指定する必要があります。 このURLは、Jenkinsが提供する特定のREST APIエンドポイントを指す必要があり、そのエンドポイントはbitbucket-hookです。

URLは末尾のスラッシュで終了する必要があることに注意する必要があります

 

上記のWebhookを構成する際に、オプションリポジトリプッシュを選択しました。 これは、プッシュが発生するたびにBitbucketがJenkinsサーバーに通知を送信することを意味します

この動作は変更できます。 選択できるいくつかの異なるオプションがあります。

今のところ、デフォルトのオプション、つまりリポジトリプッシュを使用してみましょう。

GithubでWebhookをセットアップすることもできます; ここは、それを構成する方法に関するいくつかの役立つ情報です。

簡単に言うと、Groovy言語でパイプラインスクリプトを作成しました– は、提供されたSCMリポジトリのマスターブランチから(提供されたユーザー資格情報を使用して)ソースコードをプルする必要があります。リポジトリをプッシュしてから、Jenkinsサーバーでmvncleaninstallコマンドを実行します。

このジョブは特定の時間に実行されないことに注意する必要があります。 代わりに、SCMリポジトリのマスターブランチがプッシュされるまで待機します。

新しいプッシュイベントが発生するとすぐに、Jenkinsジョブダッシュボードの「ビルド履歴」セクションに新しい実行が表示されます。

横にpendingステータスで新しいビルドが開始されているのがわかります。

数秒で、このビルドの実行が開始され、コンソール出力に完全なログが表示されます。

コンソール出力の最初のステートメントは「StartedbyBitbucketpush by ..」と言っています。– これは、Bitbucketでプッシュが行われたときにビルドが自動的にトリガーされたことを意味します。

 

すべてがうまくいけば、ビルドは正常に完了するはずです。

6. Jenkinsfileを使用するジョブを作成する

Jenkinsパイプラインにスクリプトを記述せずに、BitbucketWebhookによってトリガーされるビルド実行を実現することは可能です。

そのためには、 Bitbucketで新しいファイルを作成し、Jenkinsfileという名前を付ける必要があります。 パイプラインスクリプトは、わずかな変更を加えてこのJenkinsfileに転送する必要があります。 その方法を正確に見てみましょう。

Jenkinsで新しいパイプラインを作成し、PipelineWithJenkinsfileという名前を付けます。

パイプライン構成ページで、PipelineセクションのDefinitionの横にあるSCMからPipelineスクリプトを選択します。 SCMの横にさまざまなオプションのドロップダウンが表示されます。 ドロップダウンからGitを選択しましょう。

次に、BitbucketリポジトリのURLとユーザーの資格情報を提供する必要があります。 スクリプトパスの横のテキストフィールドにデフォルト値、つまりJenkinsfileが含まれていることを確認しましょう。

 

Jenkinsに関する限り、構成する必要があるのはそれだけです。

ただし、リポジトリにJenkinsfileを作成する必要があります。 それでは、新しいテキストファイルを作成し、Jenkinsfileという名前を付けて、次の単純なGroovyスクリプトを使用してみましょう。

node('master') {
    stage('scm') {
        checkout scm
    }
    stage('build') {
        withMaven(jdk: 'JDK9.0.1', maven: 'Maven3.5.2') {
            sh 'mvn clean install'
        }
    }
}

このスクリプトは、前のセクションで作成したパイプラインスクリプトとほぼ同じですが、1つだけ変更が加えられています。 stage(’scm’)のステートメントには、URLとユーザーの資格情報は必要ありません。 代わりに、必要なのは checkoutscmだけです。

以上です。 このファイルをBitbucketにコミットすると、Jenkins でビルドがトリガーされ、ビルド履歴でビルドがトリガーされるはずです。

このセクションと前のセクションの唯一の違いは、 Bitbucketリポジトリでパイプラインスクリプトを定義しました。

したがって、ビルドスクリプトは、ビルドする必要があるプロジェクトのソースコードの一部です。 Jenkins自体でスクリプトを維持していません。

代わりに、JenkinsはSCMリポジトリの詳細とスクリプトファイルについての知識を持っています。 このリポジトリへのプッシュがあるときはいつでも、JenkinsfileのスクリプトがJenkinsサーバーで実行されます。

7. 結論

このチュートリアルでは、さまざまな戦略を使用してJenkinsでジョブを構成およびスケジュールする方法を説明しました。

また、BitbucketなどのSCMリポジトリで実行された特定のアクションに基づいて、ジョブが自動的にトリガーされるようにJenkinsでジョブを構成する方法も確認しました。