Jenkins パイプライン入門

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

はじめに

Jenkins Pipeline の基本を学ぶためのこの実験へようこそ。Jenkins Pipeline は、ビルド、テスト、デプロイのプロセス全体をコードとして定義できる強力な機能です。この定義は Jenkinsfile というテキストファイルに保存され、通常はアプリケーションのソースコードと一緒にバージョン管理されます。このプラクティスは「Pipeline-as-Code」として知られています。

この実験では、構造化され、ユーザーフレンドリーな方法でパイプラインを作成できる Declarative Pipeline 構文に焦点を当てます。この実験の終わりまでに、以下のことができるようになります。

  • Jenkins の Web インターフェースで新しい Pipeline プロジェクトを作成する。
  • Declarative 構文を使用して基本的な 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ボタンをクリックします。
Jenkins dashboard New Item button
  1. プロジェクトの設定ページに移動します。現時点では、設定はそのままにしておきます。一番下までスクロールし、Saveをクリックします。

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

SCM をリモートリポジトリで使用するように構成する

次に、Jenkins プロジェクトがリモート Git リポジトリからパイプライン定義を取得するように構成します。ここでは、事前に構成された Jenkinsfile とサンプルアプリケーションを含むデモリポジトリを使用します。

デモリポジトリは次の場所にあります:https://github.com/labex-labs/jenkins-demo

リモートリポジトリから使用する 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!"'
            }
        }
    }
}

この Declarative Pipeline スクリプトには複数のステージが含まれており、主要な概念を示しています。

  • pipeline { ... }: パイプライン全体を定義するメインブロックです。
  • agent any: Jenkins に利用可能な任意の 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 フィールドに次を入力します:https://github.com/labex-labs/jenkins-demo
  7. Script Path フィールドに次を入力します:introduction-to-pipelines/Jenkinsfile
  8. Save をクリックします。
Jenkins pipeline configuration for remote Git repository

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

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

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

  1. my-first-pipeline のプロジェクトページで、左側のメニューにある Build Now をクリックします。

  2. 新しいビルドがスケジュールされ、左側の Build History パネルに表示されます。履歴の下には、Stage View が表示され、「Build」ステージが実行され、完了すると緑色に変わります。

    Pipeline stage view showing build progress
  3. 詳細な出力を確認するには、Build History のビルド番号(例:#1)をクリックします。

  4. ビルドのサマリーページで、左側のメニューにある Console Output をクリックします。

    Console output showing successful pipeline execution
  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. my-first-pipeline プロジェクトの Jenkins UI に戻り、まだ実行していない場合は Build Now をクリックしてパイプラインを再度実行します。

  2. プロジェクトダッシュボードの Stage View を観察します。「Build」、「Test」、「Deploy」ステージを表す 3 つの列が表示されます。ビルドが各ステージを進むにつれて、Jenkins はその進行状況を視覚化します。

    Jenkins Stage View showing Build Test Deploy stages
  3. Stage View のいずれかのステージをクリックすると、その特定のステージの詳細なログが表示されます。

  4. 各ステージが順次実行されることに注目してください。Jenkins は、次のステージに進む前に、現在のステージが正常に完了するのを待ちます。

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

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

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

リモートリポジトリの Jenkinsfile は、デプロイターゲットを指定する環境変数を使用して、この概念を既に実証しています。

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

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

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

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

  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 でパイプラインプロジェクトを作成する。
  • リモート Git リポジトリ (SCM) から Jenkinsfile を使用するようにプロジェクトを構成する。
  • 複数のステージを持つ宣言型パイプラインの構造を理解する。
  • パイプラインを実行し、そのコンソール出力を検査する。
  • パイプラインが明確さと整理のために論理的なステージにどのように構造化されているかを観察する。
  • パイプラインをより動的にするために環境変数がどのように定義され、使用されるかを理解する。

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