JobDSLを使用してJenkinsジョブ構成を自動化する方法

提供:Dev Guides
移動先:案内検索

著者は、 Write for DOnations プログラムの一環として、 InternetArchiveを選択して寄付を受け取りました。

序章

Jenkins は人気のある自動化サーバーであり、継続的インテグレーション(CI)および継続的展開(CD)ワークフローを調整するためによく使用されます。 ただし、Jenkins自体を設定するプロセスは、従来、システム管理者にとって手動のサイロ化されたプロセスでした。 このプロセスには通常、依存関係のインストール、Jenkinsサーバーの実行、サーバーの構成、パイプラインの定義、およびジョブの構成が含まれます。

次に、 Everything as Code(EaC)パラダイムが登場しました。これにより、管理者はこれらの手動タスクをバージョン管理および自動化可能な宣言型コードとして定義できます。 以前のチュートリアルでは、Jenkinsfiles を使用してJenkinsパイプラインをコードとして定義する方法と、依存関係をインストールし、DockerとJCasCを使用してJenkinsサーバーの構成をコードとして定義する方法について説明しました。 ただし、Docker、JCasC、およびパイプラインのみを使用してJenkinsインスタンスをセットアップすると、これまでのところしか得られません。これらのサーバーにはジョブがプリロードされないため、誰かが手動で構成する必要があります。 Job DSL プラグインはソリューションを提供し、Jenkinsジョブをコードとして構成できるようにします。

このチュートリアルでは、ジョブDSLを使用して2つのデモジョブを構成します。1つはコンソールに'Hello World'メッセージを出力し、もう1つはGitリポジトリからパイプラインを実行します。 チュートリアルを最後まで実行すると、独自のユースケース用に構築できる最小限のJobDSLスクリプトが得られます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • セットアップウィザードを介して、またはJenkins Configuration as Code(JCasC)を使用してセットアップされたJenkinsサーバー。 実験できるJenkinsサーバーがない場合は、他のガイドに従って、 UbuntuKubernetes 、またはDockerとJCasC[ X183X]。

ステップ1—JobDSLプラグインのインストール

Job DSL プラグインは、このチュートリアルでデモジョブに使用するJobDSL機能を提供します。 このステップでは、JobDSLプラグインをインストールします。

まず、your_jenkins_url/pluginManager/availableに移動します。 検索ボックスにJob DSLと入力します。 次に、表示されるプラグインリストで、 Job DSL の横のチェックボックスをオンにし、再起動せずにインストールをクリックします。

注: Job DSLを検索しても結果が返されない場合は、Job DSLプラグインが既にインストールされているか、Jenkinサーバーのプラグインリストが更新されていないことを意味します。

your_jenkins_url/pluginManager/installedに移動し、Job DSLを検索すると、JobDSLプラグインが既にインストールされているかどうかを確認できます。

your_jenkins_url/pluginManager/availableに移動し、(空の)プラグインリストの下部にある今すぐ確認ボタンをクリックすると、Jenkinsサーバーのプラグインリストを更新できます。


インストールプロセスを開始すると、インストールの進行状況を示すページにリダイレクトされます。 次の手順に進む前に、 JobDSLLoadingpluginextensionsの両方の横にSuccessが表示されるまで待ちます。

JobDSLプラグインをインストールしました。 これで、JobDSLを使用してジョブをコードとして構成する準備が整いました。 次のステップでは、ジョブDSLスクリプト内でデモジョブを定義します。 次に、スクリプトをシードジョブに組み込みます。シードジョブを実行すると、定義されたジョブが作成されます。

ステップ2—シードジョブの作成

シードジョブは、ジョブDSLスクリプトを実行する通常のJenkinsジョブです。 次に、スクリプトには、追加のジョブを作成する命令が含まれています。 要するに、シードジョブはより多くのジョブを作成するジョブです。 このステップでは、ジョブDSLスクリプトを作成し、それをシードジョブに組み込みます。 定義するジョブDSLスクリプトは、ジョブのコンソール出力に'Hello World!'メッセージを出力する単一のフリースタイルジョブを作成します。

Job DSLスクリプトは、JobDSLプラグインによって提供されるAPIメソッドで構成されています。 これらのAPIメソッドを使用して、タイプ(フリースタイルジョブとパイプラインジョブ)、ビルドトリガー、ビルドパラメーター、ビルド後のアクションなど、ジョブのさまざまな側面を構成できます。 サポートされているすべてのメソッドは、APIリファレンスサイトにあります。

デフォルトでは、サイトには、コアJenkinsインストールの一部として使用できるジョブ構成設定のAPIメソッドと、サポートされている184個のプラグイン(v1.77の時点で正確)によって有効になっている設定が表示されます。 Job DSLプラグインがコアJenkinsインストールに対してのみ提供するAPIメソッドをより明確に把握するには、検索ボックスの横にあるファンネルアイコンをクリックし、プラグインでフィルターチェックボックスをオンまたはオフにして選択を解除しますすべてのプラグイン。

APIメソッドのリストが大幅に削減されました。 JenkinsのインストールにJobDSLプラグイン以外のプラグインがインストールされていなくても、残っているものは機能します。

「HelloWorld」フリースタイルジョブの場合、job APIメソッドが必要です(freeStyleJobjobのエイリアスであり、機能します)。 ジョブメソッドドキュメントに移動してみましょう。

job(String name) { … }の省略記号アイコン()をクリックして、jobブロック内で使用可能なメソッドとブロックを表示します。

jobブロック内で最も一般的に使用されるメソッドとブロックのいくつかを見てみましょう。

  • parameters:ユーザーがジョブの新しいビルドを作成するときに入力するパラメーターを設定します。
  • properties:ジョブ内で使用される静的な値。
  • scm:GitHubなどのソース管理プロバイダーからソースコードを取得する方法の構成。
  • steps:ビルドの各ステップの定義。
  • triggers:ビルドを手動で作成する以外に、どのような状況でジョブを実行するかを指定します(たとえば、 cronジョブのように定期的に、またはGitHubリポジトリへのプッシュなどのイベントの後に) )。

子ブロックをさらに展開して、その中で使用できるメソッドとブロックを確認できます。 steps { … }の省略記号アイコン()をクリックして、シェルスクリプトの実行に使用できるshell(String command)メソッドを見つけます。

これらをまとめると、次のようなJob DSLスクリプトを記述して、実行時に出力コンソールに'Hello World!'を出力するフリースタイルジョブを作成できます。

job('demo') {
    steps {
        shell('echo Hello World!')
    }
}

Job DSLスクリプトを実行するには、最初にそれをシードジョブに組み込む必要があります。

シードジョブを作成するには、your_jenkins_urlに移動し、(必要に応じて)ログインして、ダッシュボードの左側にある新しいアイテムリンクをクリックします。 次の画面で、seedと入力し、フリースタイルプロジェクトを選択して、OKをクリックします。

次の画面で、ビルドセクションまでスクロールし、ビルドステップの追加ドロップダウンをクリックします。 次に、 Process JobDSLsを選択します。

次に、提供されたDSLスクリプトの横にあるラジオボタンをクリックし、作成したジョブDSLスクリプトをDSLスクリプトテキスト領域に貼り付けます。

保存をクリックしてジョブを作成します。 これにより、seedジョブページに移動します。

次に、your_jenkins_urlに移動し、seedジョブが存在することを確認します。

これで、JobDSLスクリプトを組み込んだシードジョブが正常に作成されました。 次のステップでは、シードジョブを実行して、ジョブDSLスクリプトに基づいて新しいジョブが作成されるようにします。

ステップ3—シードジョブの実行

このステップでは、シードジョブを実行し、JobDSLスクリプト内で定義されたジョブが実際に作成されていることを確認します。

まず、seedジョブページに戻り、左側の Build Now ボタンをクリックして、seedジョブを実行します。

ページを更新すると、生成されたアイテムという新しいセクションが表示されます。 ジョブDSLスクリプトで指定したdemoジョブが一覧表示されます。

your_server_ipに移動すると、ジョブDSLスクリプトで指定したdemoジョブが見つかります。

デモリンクをクリックして、demoジョブページに移動します。 シードジョブ:シードが表示されます。これは、このジョブがseedジョブによって作成されたことを示しています。 次に、 Build Now リンクをクリックして、demoジョブを1回実行します。

これにより、ビルド履歴ボックス内にエントリが作成されます。 エントリの日付にカーソルを合わせると、小さな矢印が表示されます。 それをクリックしてドロップダウンを表示します。 ドロップダウンから、コンソール出力を選択します。

これにより、このビルドからのログとコンソール出力が表示されます。 その中には、+ echo Hello World!の後にHello World!という行があります。これは、ジョブDSLスクリプトのshell('echo Hello World!')ステップに対応します。

demoジョブを実行し、ジョブDSLスクリプトで指定されたechoステップが実行されたことを確認しました。 次の最後のステップでは、ジョブDSLスクリプトを変更して再適用し、追加のパイプラインジョブを含めます。

ステップ4—パイプラインジョブの定義

Everything as Codeパラダイムに沿って、ますます多くの開発者が、ビルドをフリースタイルジョブではなく pipeline ジョブ(通常はJenkinsfileという名前)を使用するジョブとして定義することを選択しています。 。 これまでに定義したdemoジョブは、小さなデモンストレーションです。 このステップでは、GitHubからGitリポジトリをプルダウンし、パイプラインスクリプトの1つで定義されたパイプラインを実行するより現実的なジョブを定義します。

JenkinsがGitリポジトリをプルし、パイプラインスクリプトを使用してビルドするには、追加のプラグインをインストールする必要があります。 したがって、Job DSLスクリプトに変更を加える前に、まず必要なプラグインがインストールされていることを確認してください。

your_jenkins_url/pluginManager/installedに移動し、プラグインリストで GitPipeline:Job 、および Pipeline:Groovyプラグインが存在するかどうかを確認します。 いずれもインストールされていない場合は、your_jenkins_url/pluginManager/availableに移動し、プラグインを検索して選択し、再起動せずにインストールをクリックします。

必要なプラグインがインストールされたので、追加のパイプラインジョブを含めるためにジョブDSLスクリプトを変更することに焦点を移しましょう。

パブリックjenkinsci/ pipeline-examples Gitリポジトリからコードをプルし、そこにあるenvironmentInStage.groovy宣言型パイプラインスクリプトを実行するパイプラインジョブを定義します。

もう一度、 Jenkins Job DSL APIリファレンスに移動し、じょうごアイコンをクリックしてプラグインによるフィルターメニューを表示し、Gitを除くすべてのプラグインの選択を解除します。 、パイプライン:ジョブ、およびパイプライン:Groovy

左側のメニューのpipelineJobをクリックし、pipelineJob(String name) { … }ブロックを展開してから、definition { … }cpsScm { … }scm { … }ブロック。

各APIメソッドの上に、それらの役割を説明するコメントがあります。 このユースケースでは、GitHubリポジトリ内にあるパイプラインスクリプトを使用してパイプラインジョブを定義する必要があります。 したがって、ジョブDSLスクリプトを次のように変更する必要があります。

job('demo') {
    steps {
        shell('echo Hello World!')
    }
}

pipelineJob('github-demo') {
    definition {
        cpsScm {
            scm {
                git {
                    remote {
                        github('jenkinsci/pipeline-examples')
                    }
                }
            }
            scriptPath('declarative-examples/simple-examples/environmentInStage.groovy')
        }
    }
}

変更するには、your_jenkins_url/job/seed/configureに移動し、 DSLスクリプトテキスト領域を見つけて、内容を新しいジョブDSLスクリプトに置き換えます。 次に、保存を押します。 次の画面で、今すぐビルドをクリックしてシードジョブを再実行します。

次に、新しいビルドの[コンソール出力]ページに移動すると、Added items: GeneratedJob{name='github-demo'}が表示されます。これは、既存のジョブを変更せずに、新しいパイプラインジョブを正常に追加したことを意味します。

これは、your_jenkins_urlに移動して確認できます。 github-demoジョブがジョブのリストに表示されます。

最後に、your_jenkins_url/job/github-demo/に移動し、今すぐビルドをクリックして、ジョブが意図したとおりに機能していることを確認します。 ビルドが完了したら、your_jenkins_url/job/github-demo/1/consoleに移動すると、Jenkinsがリポジトリのクローンを作成し、パイプラインスクリプトを実行したことを示す[コンソール出力]ページが表示されます。

結論

このチュートリアルでは、Job DSLプラグインを使用して、一貫性のある繰り返し可能な方法でJenkinsサーバー上のジョブを構成しました。

しかし、Job DSLは、Everything as Code(EaC)パラダイムに従うJenkinsエコシステムの唯一のツールではありません。 JenkinsをDockerコンテナーとしてデプロイし、Jenkins Configuration as Code(JCasC)を使用してセットアップすることもできます。 Docker、JCasC、Job DSL、およびパイプラインを組み合わせることで、開発者と管理者は、手動で関与することなく、Jenkinsを完全に自動的にデプロイおよび構成できます。