Jenkins パイプライン入門

JenkinsBeginner
オンラインで実践に進む

はじめに

Jenkins パイプラインの基礎を学ぶこのラボへようこそ。Jenkins パイプラインは、ビルド、テスト、デプロイのプロセス全体をコードとして定義できる強力な機能です。この定義は Jenkinsfile と呼ばれるテキストファイルに保存され、通常はアプリケーションのソースコードと一緒にバージョン管理されます。この手法は「パイプライン・アズ・コード(Pipeline-as-Code)」と呼ばれます。

このラボでは、構造化された使いやすいパイプライン作成方法を提供する「宣言的パイプライン(Declarative Pipeline)」構文に焦点を当てます。このラボを終える頃には、以下のことができるようになります。

  • Jenkins Web インターフェースで新しいパイプラインプロジェクトを作成する。
  • 宣言的構文を使用して基本的な Jenkinsfile を記述する。
  • ローカル Git リポジトリの Jenkinsfile を使用するようにプロジェクトを設定する。
  • パイプラインを実行し、その出力を確認する。
  • パイプラインを複数のステージに整理する。
  • 環境変数を使用して設定を管理する。

すでにコンテナ内で Jenkins インスタンスが起動しています。それでは始めましょう。

Jenkins でパイプラインプロジェクトを作成する

最初のステップは、Jenkins で新しいパイプラインプロジェクトを作成することです。このプロジェクトタイプは、Jenkinsfile で定義されたパイプラインを実行するために特別に設計されています。

  1. デスクトップインターフェースから Firefox ブラウザを開きます。ブラウザは自動的に http://localhost:8080 を開くため、手動で URL を入力する必要はありません。ログインは不要です。
  2. Jenkins ダッシュボードの左側メニューにある New Item(新規ジョブ作成)をクリックします。
  3. Enter an item name(アイテム名を入力)フィールドに my-first-pipeline と入力します。
  4. プロジェクトタイプの一覧から Pipeline を選択します。
  5. ページ下部の OK ボタンをクリックします。

パイプラインプロジェクトの作成

  1. プロジェクトの設定ページに移動します。現時点では設定はそのままにして、ページの一番下までスクロールし、Save(保存)をクリックします。

これで空のパイプラインプロジェクトが作成されました。次のステップでは、Jenkinsfile を作成し、このプロジェクトがそれを使用するように設定します。

ローカル Git リポジトリを使用するように SCM を設定する

次に、Jenkins コンテナ内で提供されているローカル Git リポジトリからパイプライン定義を取得するように Jenkins プロジェクトを設定します。これにより、外部ネットワークに依存せずに、実際の「SCM からのパイプラインスクリプト(Pipeline script from SCM)」ワークフローを体験できます。

デモ用リポジトリの場所は git://localhost/pipeline-demo.git です。

Jenkins がこのリポジトリから読み込む Jenkinsfile の中身を確認してみましょう。

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    stages {
        stage('Build') {
            steps {
                echo 'Building the application...'
                sh 'echo "Compiling source code..."'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing the application...'
                sh 'echo "Running unit tests..."'
            }
        }
        stage('Deploy') {
            steps {
                echo "Deploying the application to ${env.DEPLOY_TARGET}..."
                sh 'echo "Application deployed successfully!"'
            }
        }
    }
}

この宣言的パイプラインスクリプトには複数のステージが含まれており、重要な概念を示しています。

  • pipeline { ... }: パイプライン全体を定義するメインブロック。
  • agent any: 利用可能なエージェントでパイプラインを実行するように Jenkins に指示します。
  • environment { ... }: パイプライン全体で使用できる環境変数を定義します。
  • stages { ... }: パイプライン内のすべてのステージを囲むラッパー。
  • stage('...') { ... }: 特定のステージを定義します。ステージはワークフローを可視化するのに役立ちます。
  • steps { ... }: ステージ内で実行される実際のコマンドを含みます。
  • echo '...': ビルドログにメッセージを出力するステップ。
  • sh '...': シェルコマンドを実行するステップ。

それでは、このリポジトリを使用するように Jenkins プロジェクトを設定します。

  1. ブラウザで Jenkins UI に戻り、my-first-pipeline プロジェクトページに移動します。
  2. 左側メニューの Configure(設定)をクリックします。
  3. Pipeline セクションまでスクロールします。
  4. Definition ドロップダウンを "Pipeline script" から Pipeline script from SCM に変更します。
  5. 表示された SCM ドロップダウンから Git を選択します。
  6. Repository URL フィールドに git://localhost/pipeline-demo.git と入力します。
  7. Script Path フィールドに Jenkinsfile と入力します。
  8. Save(保存)をクリックします。

パイプライン SCM 設定

これで、ローカル Git リポジトリで定義されたパイプラインを実行するようにプロジェクトが設定されました。

パイプラインを実行して出力を確認する

プロジェクトの設定が完了したので、パイプラインを実行して実際に動かしてみましょう。

  1. my-first-pipeline のプロジェクトページで、左側メニューの Build Now(ビルド実行)をクリックします。

  2. 新しいビルドがスケジュールされ、左側の Build History(ビルド履歴)パネルに表示されます。履歴の下にある Stage View(ステージビュー)では、"Build" ステージが実行され、完了すると緑色に変わる様子を確認できます。

    パイプラインプロジェクトのビルド履歴

  3. 詳細な出力を確認するには、ビルド履歴内のビルド番号(例:**#1**)をクリックします。

  4. ビルドの概要ページで、左側メニューの Console Output(コンソール出力)をクリックします。

    パイプライン実行成功を示すコンソール出力

  5. ログをスクロールして確認してください。パイプラインのステップからのメッセージが表示されており、パイプラインが正常に実行されたことがわかります。

...
[Pipeline] { (Build)
[Pipeline] echo
Building the application...
[Pipeline] sh
+ echo Compiling source code...
Compiling source code...
[Pipeline] } // stage
[Pipeline] { (Test)
[Pipeline] echo
Testing the application...
[Pipeline] sh
+ echo Running unit tests...
Running unit tests...
[Pipeline] } // stage
[Pipeline] { (Deploy)
[Pipeline] echo
Deploying the application to staging...
[Pipeline] sh
+ echo Application deployed successfully!
Application deployed successfully!
[Pipeline] } // stage
...
Finished: SUCCESS

これで最初のパイプラインの実行と出力の確認が完了しました。リポジトリの Jenkinsfile で定義された 3 つのステージ(Build、Test、Deploy)が自動的に実行されたことに注目してください。

パイプライン内の複数のステージを理解する

実際のパイプラインは、アプリケーションのビルド、テスト、デプロイといった複数のステージで構成されます。ローカルリポジトリの Jenkinsfile には、この重要な概念を示す個別のステージがすでに含まれています。

パイプラインがどのように複数のステージで構成されているかを確認しましょう。

stages {
    stage('Build') {
        steps {
            echo 'Building the application...'
            sh 'echo "Compiling source code..."'
        }
    }
    stage('Test') {
        steps {
            echo 'Testing the application...'
            sh 'echo "Running unit tests..."'
        }
    }
    stage('Deploy') {
        steps {
            echo "Deploying the application to ${env.DEPLOY_TARGET}..."
            sh 'echo "Application deployed successfully!"'
        }
    }
}
  1. Jenkins UI の my-first-pipeline プロジェクトに戻り、まだ実行していない場合は Build Now をクリックしてパイプラインを再度実行します。

  2. プロジェクトダッシュボードの Stage View を観察してください。"Build"、"Test"、"Deploy" の各ステージを表す 3 つの列が表示されます。ビルドが各ステージを通過するにつれて、Jenkins がその進捗を可視化します。

    Build、Test、Deploy ステージを示す Jenkins ステージビュー

  3. ステージビュー内の任意のステージをクリックすると、そのステージの詳細ログを確認できます。

  4. 各ステージが順番に実行されることに注目してください。Jenkins は、あるステージが正常に完了するのを待ってから次のステージへ進みます。

パイプラインをステージで構成することで、監視が容易な明確で保守性の高いワークフローを作成できます。各ステージは CI/CD プロセスの論理的なフェーズを表しており、問題が発生した場所の特定やビルドの進捗状況の把握が容易になります。

パイプラインにおける環境変数を理解する

最後のステップでは、環境変数について学びます。environment ディレクティブを使用すると、パイプライン全体で使用できる変数を定義できます。これは、ステップ内に値をハードコーディングすることなく設定を管理するのに最適です。

ローカルリポジトリの Jenkinsfile では、デプロイ先を指定する環境変数を使用してこの概念をすでに示しています。

環境変数がどのように定義され、使用されるかを確認しましょう。

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    stages {
        // ... 他のステージ ...
        stage('Deploy') {
            steps {
                echo "Deploying the application to ${env.DEPLOY_TARGET}..."
                sh 'echo "Application deployed successfully!"'
            }
        }
    }
}

Jenkins パイプラインにおける環境変数の重要なポイント:

  • environment { ... } ブロックは、パイプライン全体で利用可能な変数を定義します。
  • 変数は ${env.VARIABLE_NAME} 構文を使用してアクセスします。
  • 変数展開を行う文字列には必ず二重引用符 (") を使用してください。Groovy の変数展開は二重引用符で囲まれた文字列内でのみ機能するためです。
  • 環境変数を使用することで、パイプラインの柔軟性が高まり、保守が容易になります。
  1. まだ実行していない場合は、Jenkins で Build Now をクリックして新しいビルドをトリガーします。

  2. ビルド完了後、そのビルドの Console Output を確認します。"Deploy" ステージのログを見ると、変数が正しく置換されていることがわかります。

...
[Pipeline] { (Deploy)
[Pipeline] echo
Deploying the application to staging...
[Pipeline] sh
+ echo Application deployed successfully!
Application deployed successfully!
[Pipeline] } // stage
...
Finished: SUCCESS
  1. DEPLOY_TARGET 環境変数の値 staging が echo 文の中に自動的に代入されたことに注目してください。

環境変数は、パイプラインコード自体を変更することなく、異なる環境(開発、ステージング、本番)に合わせて簡単に設定できる柔軟なパイプラインを作成するために不可欠です。

まとめ

おめでとうございます!Jenkins パイプライン入門を無事に完了しました。CI/CD ワークフローをコードとして定義する核心的な概念を学びました。

このラボでは、以下のことを実践しました。

  • Jenkins UI でパイプラインプロジェクトを作成する。
  • Jenkins に提供されたローカル Git リポジトリの Jenkinsfile を使用するようにプロジェクトを設定する。
  • 複数のステージを持つ宣言的パイプラインの構造を理解する。
  • パイプラインを実行し、コンソール出力を確認する。
  • 明確さと整理のために、パイプラインがどのように論理的なステージに構成されるかを観察する。
  • パイプラインをより動的にするために、環境変数がどのように定義され使用されるかを理解する。

これらの基礎スキルは、高度な自動化パイプラインを構築するために不可欠です。これで、パラメータの使用、認証情報の管理、さまざまなビルド・デプロイツールとの統合など、より高度なトピックを探求する準備が整いました。