開発者ドキュメント

Jenkinsでの仕事のスケジュール


1前書き

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

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


2初期設定

Jenkinsサーバー上で、

JDKとMavenがそれぞれ

Global Tool Configuration

にJDK9.0.1とMaven3.5.2

の名前でインストールされているとします。

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


3簡単なジョブのスケジューリング

求人設定ページで、

Build Triggers

セクションまでまっすぐスクロールしましょう。簡単な仕事を作成するつもりなので、[定期的に作成]というチェックボックスをオンにします。このチェックボックスを選択するとすぐに、

Schedule

ラベル付きのテキストボックスが表示されます。

  • リンクに値を入力する必要があります:/cron-expressions[Cron準拠の形式]** 。ボックスの横にある疑問符をクリックすると、そのページに詳細な情報が表示されます。

ここに


/2



**

と入力しましょう。これは2分の間隔を表します。

リンク:/uploads/build-triggers-section.png%201227w[]

テキストボックスから移動すると、ボックスの真下に情報が表示されます。それはいつジョブが次に実行されるのかを教えてくれます。

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

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


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

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

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


Build Triggers

セクションで、

Build Periodically

を選択する代わりに



Poll SCM


を選択しましょう。これを実行するとすぐに、Label

Schedule

というテキストボックスが表示されます。

このボックスに


/5



**

と入力してみましょう。つまり、5分ごとにジョブを実行するようにスケジュールします。

リンク:/uploads/poll-scm.png%201200w[]

「ソースコード管理」セクションまでスクロールアップしましょう。

Git

の横にあるラジオボタンを選択すると、

Repositories

というラベルの付いた新しいセクションが表示されます。

  • これがSCMリポジトリの詳細を設定する必要がある場所です** 。

SCMリポジトリのURLを

リポジトリURL

テキストフィールドに入力しましょう。

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

[認証情報]の横にある[追加]ボタンをクリックして、ユーザー認証情報を作成するためのポップアップ画面を表示します。


Username with Password

として

Kind

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

リンク:/uploads/AddUser-1.png%201402w[]

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


Credentials

の横にあるプルダウンでこのユーザー認証情報を選択しましょう。

リンク:/uploads/SourceCodeManagement-2.png%201172w[]

さて、最後にやるべきことはビルドスクリプトを設定することです。


Build

セクションまでスクロールし、

Add build step

をクリックして

Execute Shell

を選択します。 SCMリポジトリでMavenプロジェクトに取り組んでいるので、

Mavenビルドを実行する

mvn clean install

と入力する必要があります。

ここで何をしたのかを理解しよう。

5分ごとに実行されるようにスケジュールされたジョブを作成しました。

ジョブは、与えられたBitbucketリポジトリのマスターブランチからソースコードを取得するように設定されています

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

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

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


Console Output

はMavenビルドの出力を表示するはずです。コンソールの出力で、ソースコードがBitbucketから取得され、コマンド

mvn clean install

が実行されたことがわかります。

これはMavenビルドなので、ダウンロードされるMaven依存関係の数によっては

コンソールの出力が非常に長くなる可能性があります

しかし、出力の最後に、

BUILD SUCCESS

というメッセージが表示されるはずです。


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

これまで、定義済みのスケジュールされた時間に実行されるジョブを作成する方法を説明しました。

それでは、特定のスケジュールにとらわれない仕事を作りましょう。

代わりに、SCMリポジトリに新しいコミットがあるたびに自動的に起動するように設定します。

Jenkinsダッシュボードに戻って、[New Item]をクリックしましょう。今回は、[フリースタイルプロジェクト]の代わりに[パイプライン]を選択します。この仕事を

PipelineAsScriptJob.

と名付けましょう。

[OK]ボタンをクリックすると、パイプライン設定ページに移動します。このページには、 ”

一般”、 ”

トリガーの作成”、 “高度なプロジェクトオプション”、 “パイプライン”などのセクションがあります。

変更がBitbucket

にプッシュされたら、「

Build Triggers」

セクションおよび

Buildの横にある選択チェックボックスまでスクロールしてみましょう。 ** このオプションは、Bitbucket Pluginをインストールした場合にのみ利用可能になります。


Pipeline

セクションまでスクロールしましょう。

Definition

の横にあるドロップダウンリストで

Pipeline Script

を選択します。

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

スクリプト全体を入力することも、Jenkinsが提供する

Pipeline Syntax

** と呼ばれるユーティリティを使用することもできます。

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

リンク:/uploads/pipeline-syntax-link.png%201212w[]

上の図で強調表示されているように、

Pipeline Syntax

をクリックすると、ブラウザに新しいタブが開きます。これは私たちが実行したい操作を指定できる便利なユーティリティです。

ツールはGroovyでスクリプトを生成します

。その後、スクリプトをコピーしてパイプライン構成に貼り付けることができます。

[サンプルステップ]ドロップダウンで[チェックアウト:一般SCM]を選択します。

SCMリポジトリURLとユーザー資格情報を入力したら、[

パイプラインスクリプトの生成

]ボタンをクリックする必要があります。

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

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

同じページで、上にスクロールして、[サンプルステップ]ドロップダウンで[With Maven環境を提供]を選択します。このオプションは、Pipeline Maven Integration Pluginがインストールされている場合にのみ利用可能になります。

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

Generate Pipeline Script

ボタンをクリックする必要があります。

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

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

まだいくつかスクリプトを作成する必要があります。[

Sode Step

]ドロップダウンで[

node:Allocate node

]を選択し、[

Label]テキストフィールドに

master

と入力して、[Generate Pipeline Script

]をクリックします。

リンク:/uploads/pipeline-node-syntax.png%201502w[]

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

そして最後に。


Sample Step

ドロップダウンリストで

stage:Stage

を選択し、

Stage Name

テキストフィールドに

scm

と入力して、

Generate Pipeline Script

をクリックします。

保存しましょう。

今までに生成したすべてのスクリプトをまとめて、それらをつなぎ合わせる時が来ました。

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’)

は、ジョブが

master

** という名前のノードで実行されることを示します。これは、Jenkinsサーバーのデフォルトノードです。

上記のスクリプトを

Pipeline

セクションのテキストボックスにコピーしましょう。

この設定を保存しましょう。

今、取り残されていることが1つだけあります。 BitbucketでWebhookを設定する必要があります。

Webhookは、特定のイベントがBitbucket

で発生したときはいつでも、Jenkinsサーバにプッシュ通知を送信する責任があります。

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

Bitbucketにログインしてリポジトリを選択しましょう。左側の列に

Settings

というオプションがあります。それをクリックしましょう、そして

WORKFLOW

セクションに

Webhooks

オプションが表示されるはずです。新しいWebhookを作成しましょう。


Title

フィールドでこのWebhookに名前を付ける必要があります。また、

URL

フィールドにWebフックのURLを入力する必要があります。このURLはJenkinsが提供する特定のREST APIエンドポイントを指す必要があり、そのエンドポイントは

bitbucket-hook

です。

  • URLは末尾のスラッシュで終わらなければならないことに注意しなければなりません** :

リンク:/uploads/Webhook-1-1.png%201340w[]

上記のWebhookを設定している間は、

リポジトリプッシュ

オプションを選択しました。

これは、プッシュが発生するたびにBitbucketがJenkinsサーバーに通知を送信することを意味します

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

とりあえず、デフォルトのオプション、つまり

リポジトリプッシュ

を使用しましょう。

  • Githubでwebhookをセットアップすることもできます** 。

    here

    は、その設定方法に関するいくつかの有用な情報です。

手短に言うと、Groovy言語でパイプラインスクリプトを作成しました。

提供されたSCMリポジトリのマスターブランチからソースコードを取得する(提供されたユーザー資格情報を使用)それから

Jenkinsサーバ上で

mvn clean install

コマンドを実行してください。

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

新しいプッシュイベントがあるとすぐに、Jenkins求人ダッシュボードの[Build History]セクションに新しい実行が表示されます。

その隣に

pending

ステータスが付いた新しいビルドが開始されるはずです。

数秒以内に、このビルドが実行を開始し、

Console Output

に完全なログが表示されます。

  • コンソール出力の最初のステートメントは、 “BitBucket push by ..”によって開始されます。

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


6. Jenkinsfile

を使用するジョブを作成する

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

そのためには、

Bitbucketで新しいファイルを作成し、

Jenkinsfile


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

Jenkinsで新しいパイプラインを作成し、

PipelineWithJenkinsfile

という名前を付けます。

パイプライン設定ページで、[

パイプライン]セクションの[定義]の横にある[SCMからの

パイプラインスクリプト]を選択します。

SCM

の横に、さまざまなオプションを含むドロップダウンが表示されます。ドロップダウンから

Git

を選択しましょう。

それから、BitbucketリポジトリのURLとユーザーの資格情報を提供する必要があります。

Script Path

の横のテキストフィールドに、デフォルト値、つまり

Jenkinsfile

** が含まれていることを確認してください。

Jenkinsに関する限り、設定する必要があるのはこれだけです。

ただし、Jenkinsファイルをリポジトリに作成する必要があります。それでは、新しいテキストファイルを作成し、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とユーザーの資格情報は必要ありません。

代わりに、必要なのは

checkout scm

だけです。

以上です。

このファイルをBitbucketにコミットした瞬間に、Jenkins

でビルドが開始されます – そしてビルドが

Build History

で開始されるのがわかります。

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

そのため、ビルドスクリプトはプロジェクトのソースコードの一部で、ビルドする必要があります。このスクリプトはJenkins自体で管理しているのではありません。

その代わりに、JenkinsはSCMリポジトリの詳細とスクリプトファイルに関する知識を持っています。

このリポジトリへのプッシュがあるたびに、

Jenkinsfile

のスクリプトがJenkinsサーバー

上で実行されます。


7. 結論

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

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

モバイルバージョンを終了