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でジョブが自動的にトリガーされるように設定する方法も説明しました。