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

ジェンキンスでの仕事のスケジューリング

1. 前書き

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

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

2. 初期設定

Jenkinsサーバー上でそれぞれJDK and Maven have been installed in Global Tool Configuration with names as JDK9.0.1 and Maven3.5.2と仮定します。

また、Mavenプロジェクトを使用したBitbucketなどのwe’ve got access to an SCM repositoryが適切に設定されていることも前提としています。

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

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

We have to provide value in a Cron-compliant format。 ボックスの横にある疑問符をクリックすると、ページに詳細な情報が表示されます。

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

image

 

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

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

image

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

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

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

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

Build Triggersセクションで、instead of selecting Build Periodically, let’s select Poll SCM。 これを行うとすぐに、ラベルScheduleのテキストボックスが表示されます。

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

image

Source Code Managementセクションまでスクロールしてみましょう。 Gitの横にあるラジオボタンを選択すると、Repositoriesというラベルの付いた新しいセクションが表示されます。

This is where we need to configure details of our SCM repository。 SCMリポジトリのURLをRepository URLテキストフィールドに入力してみましょう。

image

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

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

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

image

Addボタンをクリックすると、Source Code Managementセクションに戻ります。

Credentialsの横のドロップダウンでこのユーザー資格情報を選択しましょう。

image

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

Buildセクションまで下にスクロールし、Add build stepをクリックして、Execute Shellを選択します。 SCMリポジトリでMavenプロジェクトに取り組んでいるため、we need to type mvn clean install, which will perform a Maven build.

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

5分ごとに実行するようにスケジュールされたジョブを作成しました。 The job’s been configured to pull source code from the master branch of the given Bitbucket repository

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

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

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

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

image

これはMavenビルドなので、the console output might be very long depending on the number of Maven dependencies that are downloadedです。

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

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

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

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

Jenkinsダッシュボードに戻り、New Itemをクリックしてみましょう。 今回は、Freestyle projectの代わりにPipelineを選択します。 このジョブにPipelineAsScriptJob.という名前を付けましょう

[OK]ボタンをクリックすると、パイプライン構成ページに移動します。 このページには、「General”」、「Build Triggers”」、「Advanced Project Options”」、「Pipeline”」などのセクションがあります。

Build Triggers”」セクションまで下にスクロールし、Build when a change is pushed to Bitbucketの横にあるチェックボックスを選択します。 This option will be available only if we’ve installed the Bitbucket Plugin

image

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

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

スクリプト全体を入力することも、we can make use of a utility provided by Jenkins, which is known as Pipeline Syntaxを入力することもできます。

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

image

上の図で強調表示されているように、Pipeline Syntaxをクリックすると、ブラウザに新しいタブが開きます。 これは、実行する操作とthe tool will generate the script in Groovyを指定できる便利なユーティリティです。 その後、スクリプトをコピーして、パイプライン構成に貼り付けることができます。

Sample Stepドロップダウンでcheckout: General SCMを選択しましょう。 SCMリポジトリのURLとユーザー資格情報を入力したら、Generate Pipeline Scriptボタンをクリックする必要があります。

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

image

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

同じページで、上にスクロールして、Sample StepドロップダウンでwithMaven: Provide Maven environmentを選択しましょう。 ここで、this option will be available only if Pipeline Maven Integration Plugin is installedに注意する必要があります。

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

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

image

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

生成する必要があるスクリプトがまだいくつかあります。 Sample Stepドロップダウンでnode: Allocate nodeを選択し、Labelテキストフィールドにmasterと入力して、Generate Pipeline Scriptをクリックします。

image

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

そして最後。

Sample Stepドロップダウンでstage: Stageを選択し、Stage Nameテキストフィールドにscmと入力して、Generate Pipeline Scriptをクリックします。

image

保存しましょう。

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

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')indicates that the job will be executed on a node named masterは、Jenkinsサーバーのデフォルトノードです。

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

image

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

さて、取り残されているのは1つだけです。 BitbucketでWebhookを構成する必要があります。 The Webhook is responsible for sending out a push notification to Jenkins server, whenever a particular event takes place in Bitbucket

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

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

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

It must be noted that the URL MUST end with a trailing slash

image

 

上記のWebhookを構成する際に、オプションRepository pushを選択しました。 This means Bitbucket will send a notification to Jenkins server whenever a push happens

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

とりあえず、デフォルトのオプション、つまりRepository Pushを使用してみましょう。

We can setup webhook in Github, too; hereは、それを構成する方法に関するいくつかの役立つ情報です。

簡単に言うと、Groovy言語でパイプラインスクリプトを作成しました–提供されたSCMリポジトリのthat should pull the source code from the master branch(提供されたユーザー資格情報を使用)、whenever there’s a push in the repository、次にexecute mvn clean install command on the Jenkins server

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

新しいプッシュイベントが発生するとすぐに、Jenkinsジョブダッシュボードの“Build History”セクションに新しい実行が表示されます。

新しいビルドが開始され、その横にpendingステータスが表示されます。

数秒で、このビルドの実行が開始され、Console Outputで完全なログを確認できるようになります。

The first statement in the console output says “Started by Bitbucket push by..” –これは、Bitbucketでプッシュが発生したときにビルドが自動的にトリガーされたことを意味します。

image

 

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

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

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

これを行うには、we have to create a new file in Bitbucket and name it as Jenkinsfile。 パイプラインスクリプトは、このJenkinsfileにわずかに変更して転送する必要があります。 その方法を正確に見てみましょう。

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

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

次に、BitbucketリポジトリのURLとユーザー資格情報を提供する必要があります。 the text field next to Script Path contains the default value,i.e., Jenkinsfileが次のようになっていることを確認しましょう。

image

 

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とユーザー資格情報は必要ありません。 代わりに、必要なのはcheckout scmだけです。

以上です。 The moment we commit this file into Bitbucket, it’ll trigger the build in Jenkins –そしてBuild Historyでビルドがトリガーされているのを確認する必要があります。

このセクションと前のセクションの唯一の違いは、we defined the pipeline script in the Bitbucket repository.

したがって、the build script is part of the source code of the project that needs to be built。 Jenkins自体でスクリプトを維持していません。

代わりに、JenkinsはSCMリポジトリの詳細とスクリプトファイルの知識を持っています。 Whenever there is a push to this repository, the script in Jenkinsfile gets executed on the Jenkins server

7. 結論

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

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