チュートリアル: 4 ステージのパイプラインを作成する - AWS CodePipeline

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チュートリアル: 4 ステージのパイプラインを作成する

これで、「チュートリアル: シンプルなパイプラインを作成する (S3 バケット)」または「チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)」に最初のパイプラインが作成されたため、より複雑なパイプラインを作成できるようになりました。このチュートリアルでは、4 ステージパイプラインを作成する方法について説明します。このパイプラインでは、ソースとして GitHub リポジトリを使用し、プロジェクトをビルドするための Jenkins ビルドサーバーおよびビルドしたコードをステージングサーバーにデプロイするための CodeDeploy アプリケーションを使用します。以下の図は初期の 3 ステージのパイプラインを示しています。


      ソースアクションを含むソースステージ、Jenkins アクションを含むビルドステージ、デプロイアクションを含むデプロイステージを示す図。

パイプラインが作成されたら、これを編集して、テストアクションを含むステージを追加してコードをテストします。この際、Jenkins も使用します。

このパイプラインを作成する前に、必要なリソースを設定する必要があります。例えば、ソースコードに GitHub リポジトリを使用する場合は、パイプラインに追加する前にリポジトリを作成する必要があります。このチュートリアルでは、セットアップの一部として EC2 インスタンスに Jenkins を設定する方法をデモ目的で示します。

重要

この手順でパイプラインに追加するアクションの多くは、AWS パイプラインを作成する前に作成する必要があるリソースを含んでいます。AWS ソースアクションのリソースは、パイプラインを作成するときは、常に同じ AWS リージョンに作成する必要があります。例えば、米国東部 (オハイオ) リージョンにパイプラインを作成している場合、CodeCommit リポジトリは米国東部 (オハイオ) リージョンにある必要があります。

パイプラインを作成するときにクロスリージョンアクションを追加できます。クロスリージョンアクションの AWS リソースはアクションを実行する予定の AWS リージョンと同じであることが必要です。詳細については、「CodePipeline にクロスリージョンアクションを追加する」を参照してください。

このチュートリアルを開始するには、「CodePipeline の使用開始」の一般的な前提条件を満たしている必要があります。

ステップ 1: の前提条件を満たす

Jenkins と統合するには、AWS CodePipeline は CodePipelineを使用したい Jenkins のインスタンスに、Jenkins用の CodePipeline プラグインをインストールする必要があります。また、専用の IAM ユーザーまたはロールを設定して、Jenkins プロジェクトと CodePipeline の間でアクセス許可を使用する必要があります。Jenkins と CodePipeline を統合する最も簡単な方法としては、Jenkins の統合用に作成した IAM インスタンスロールを使用する EC2 インスタンスに Jenkins をインストールします。Jenkins アクション用のパイプラインのリンクを正常に接続するには、Jenkins プロジェクトで使用するポートへのインバウンド接続を許可するように、サーバーまたは EC2 インスタンスのプロキシおよびファイアウォール設定を構成する必要があります。これらのポートに接続する前に、Jenkins でユーザーを認証してアクセス制御するように設定されていることを確認します (HTTPS 接続のみ使用できるように Jenkins のセキュリティを確保するには 443 および 8443、HTTP 接続できるようにするには 80 および 8080)。詳細については、「Jenkins のセキュリティ確保」を参照してください。

注記

このチュートリアルでは、コードサンプルを使用して、Haml から HTML に変換するビルドステップを設定します。GitHub リポジトリからオープンソースのサンプルコードをダウンロードするには、「サンプルのコピーまたはクローンを GitHub リポジトリに作成する」のステップに従います。GitHub リポジトリ内の .zip ファイルだけではなく、sample 全体が必要です。

このチュートリアルでは、以下を前提としています。

  • Jenkins のインストールと管理および Jenkins プロジェクトの作成に慣れている

  • Ruby の Rake と Haml gem が、同一コンピュータ、または Jenkins プロジェクトをホストするインスタンス上にインストールされていること。

  • Rake コマンドを端末またはコマンドラインから実行できるように、必要なシステム環境変数が設定されていること (例えば、Windows システムで、Rake をインストールしたディレクトリが追加されるように PATH 変数を変更する)。

サンプルのコピーまたはクローンを GitHub リポジトリに作成する

サンプルを複製して GitHub リポジトリにプッシュするには
  1. サンプルコードを GitHub リポジトリからダウンロードするか、リポジトリをローカルコンピュータに複製します。2 つのサンプルパッケージがあります。

  2. リポジトリから、[Fork] を選択してサンプルリポジトリを Github アカウントのレポジトリに複製します。詳細については、GitHub のドキュメントを参照してください。

Jenkins 統合に使用する IAM ロールを作成する

ベストプラクティスとして、EC2 インスタンスを起動して Jenkins サーバーをホストし、IAM ロールを使用して CodePipeline とのやり取りに必要なアクセス許可をインスタンスに付与することを検討します。

  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. IAM コンソールのナビゲーションペインで、[ロール]、[ロールを作成する] の順に選択します。

  3. [Select type of trusted entity] (信頼されたエンティティの種類を選択) で、[AWS のサービス] を選択します。[Choose the service that will use this role (このロールを使用するサービスを選択)] で、[EC2] を選択します。[Select your use case (ユースケースを選択)] で、[EC2] を選択します。

  4. [Next: Permissions] (次のステップ: アクセス許可) を選択します。[Attach permissions policies (アクセス許可ポリシーをアタッチする)] ページで、AWSCodePipelineCustomActionAccess 管理ポリシーを選択し、次に、[Next: Tags (次の手順: タグ)] を選択します。[Next: Review] (次のステップ: レビュー) を選択します。

  5. [確認] ページの [ロール名] に、Jenkins の統合専用として作成するロールの名前 (JenkinsAccessなど) を入力し、[ロールの作成] を選択します。

Jenkins をインストールする先の EC2 インスタンスを作成する場合は、「ステップ 3: インスタンスの詳細を設定する」で、インスタンスロール (JenkinsAccessなど) を必ず選択します。

インスタンスロールおよび Amazon EC2 の詳細については、「Amazon EC2 の IAM ロール」、「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス許可を付与する」、「AWS のサービス にアクセス許可を委任するロールの作成」を参照してください。

Jenkins および Jenkins 用 CodePipeline プラグインのインストールと設定

Jenkins および Jenkins 用 CodePipeline プラグインのインストールをするには、
  1. Jenkins をインストールする先の EC2 インスタンスを作成し、「ステップ 3: インスタンスの詳細を設定する」で、作成したインスタンスロール (JenkinsAccessなど) を必ず選択します。EC2 インスタンス作成の詳細については、「Amazon EC2 ユーザーガイド」の 「Amazon EC2 インスタンスの起動」を参照してください。

    注記

    使用する Jenkins リソースがすでにある場合は、特別な IAM ユーザーを作成し、そのユーザーに AWSCodePipelineCustomActionAccess 管理ポリシーを適用してから、Jenkins リソースに対してそのユーザーのアクセス認証情報を設定して使用する必要があります。Jenkins UI を使用して認証情報を指定する場合は、HTTPS のみを許可するように Jenkins を設定します。詳細については、「トラブルシューティング CodePipeline」を参照してください。

  2. EC2 インスタンスに Jenkins をインストールします。詳細については、Jenkins のドキュメントの「Jenkins のインストール」と「Jenkins の開始とアクセス」のほか、「との製品とサービスの統合 CodePipeline」の「details of integration with Jenkins」を参照してください。

  3. Jenkins を起動し、ホーム ページで [Manage Jenkins] (Jenkins の管理) を選択します。

  4. [Jenkins の管理] ページで、[プラグインの管理] を選択します。

  5. [Available] タブを選択し、[Filter] 検索ボックスに「AWS CodePipeline」と入力します。リストから [CodePipeline Plugin for Jenkins] を選択し、次に [ダウンロードして再起動後にインストール] を選択します。

  6. [プラグイン/アップグレードのインストール] ページで、[インストール完了後、実行中のジョブがなければ Jenkins を再起動する] を選択します。

  7. [ダッシュボードに戻る] を選択します。

  8. メインページで、[New Item] (新しい項目) を選択します。

  9. [Item Name] に、Jenkins プロジェクトの名前 (MyDemoProject など) を入力します。[Freestyle project] (フリースタイルプロジェクト)、[OK] の順に選択します。

    注記

    プロジェクトの名前が CodePipeline の要件を満たしていることを確認します。詳細については、「AWS CodePipeline のクォータ」を参照してください。

  10. プロジェクトの設定ページで、[Execute concurrent builds if necessary] (必要な場合に複数のビルドを並列実行する) チェックボックスをオンにします。[ソースコードの管理] で、[AWS CodePipeline] を選択します。EC2 インスタンスに Jenkins をインストールして、CodePipeline と Jenkins の統合用に作成した IAM ユーザーのプロファイルを使用して AWS CLI を設定した場合は、他のすべてのフィールドを空のままにします。

  11. [Advanced (詳細)] を選択し、[プロバイダ] に、CodePipeline に表示されるアクションのプロバイダーの名前 (MyJenkinsProviderNameなど) を入力します。この名前が一意で覚えやすいものであることを確認します。このチュートリアルの後半でパイプラインにビルドアクションを追加するときと、テストアクションを追加するときに使用します。

    注記

    このアクション名は、CodePipeline のアクションの命名要件を満たしている必要があります。詳細については、「AWS CodePipeline のクォータ」を参照してください。

  12. [Build Triggers] (トリガーのビルド) で、チェックボックスをすべてオフにし、[Poll SCM] (SCM のポーリング) を選択します。[Schedule] に、以下のようにスペースで区切ってアスタリスクを 5 つ入力します。

    * * * * *

    これは 1 分ごとに CodePipeline をポーリングします。

  13. [ビルド] で、[Add build step] (ビルドステップの追加) を選択します。[シェルの実行] (Amazon Linux、RHEL、または Ubuntu Server) [バッチコマンドの実行] (Windows Server) を選択し、次のように入力します。

    rake
    注記

    rake の実行に必要な変数と設定が環境で定義されていることを確認します。定義されていないと、ビルドは失敗します。

  14. [Add post-build action]、[AWS CodePipeline Publisher] の順に選択します。[Add] を選択し、[Build Output Locations] でこの場所は空白のままにします。この設定はデフォルトです。ビルドプロセスの最後に圧縮ファイルが作成されます。

  15. [保存] を選択して、Jenkins プロジェクトを保存します。

ステップ 2: CodePipeline でパイプラインを作成する

チュートリアルのこの部分では、[Create Pipeline] ウィザードを使用してパイプラインを作成します。

CodePipeline 自動リリースプロセスを作成するには
  1. AWS Management Console にサインインして、CodePipeline コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

  2. 必要に応じて、リージョンセレクターを使用し、パイプラインリソースの配置先のリージョンに切り替えます。例えば、前のチュートリアルでリソースを us-east-2 に作成した場合は、リージョンセレクターを必ず米国東部 (オハイオ) に設定します。

    CodePipeline で使用できるリージョンとエンドポイントの詳細については、「AWS CodePipeline エンドポイントとクォータ」を参照してください。

  3. [ようこそ] ページ、[Getting started (開始方法)] ページ、または [パイプライン] ページで、[パイプラインの作成] を選択します。

  4. [Step 1: Choose pipeline settings (ステップ 1: パイプラインの設定の選択)] ページで、[パイプライン名] にパイプラインの名前を入力します。

  5. このチュートリアルの目的では、[パイプラインタイプ] で、[V1] を選択します。[V2] を選択することもできますが、パイプラインタイプは特性と価格が異なることに注意してください。詳細については、「パイプラインのタイプ」を参照してください。

  6. サービスロール で、新しいサービスロール を選択して、CodePipeline が IAM でサービスロールを作成できるようにします。

  7. [詳細設定] をデフォルト設定のままにし、[次へ] を選択します。

  8. ステップ 2: 出典テージの追加 ページの ソースプロバイダ で、GitHub を選択します。

  9. 接続 で、既存の接続を選択するか、新しい接続を作成します。GitHub ソースアクション用の接続を作成または管理する方法については、GitHub 接続 を参照してください。

  10. [Step 3: Add build stage (ステップ 3: ビルドステージの追加)] で、[Jenkins の追加] を選択します。[プロバイダー名]で、Jenkins の CodePipeline プラグインで指定したアクションの名前 (MyJenkinsProviderNameなど) を入力します。この名前は、Jenkins用の CodePipeline プラグインの名前と正確に一致する必要があります。[サーバー URL] に、Jenkins がインストールされている EC2 インスタンスの URL を入力します。[プロジェクト名] に、Jenkins で作成したプロジェクトの名前 (MyDemoProject など) を入力し、[次へ] を選択します。

  11. [ステップ 4: デプロイステージを追加する] では、チュートリアル: シンプルなパイプラインを作成する (S3 バケット) で作成した CodeDeploy アプリケーションおよびデプロイグループを再利用します。[プロバイダをデプロイする]で、[CodeDeploy] を選択します。[アプリケーション名] に「CodePipelineDemoApplication」と入力するか、更新ボタンを選択してリストからアプリケーション名を選択します。[デプロイグループ] に「CodePipelineDemoFleet」と入力するか、リストからデプロイグループを選択して [次へ] を選択します。

    注記

    独自の CodeDeploy リソースを使用することも、新しいリソースを作成することもできますが、追加のコストが発生する場合があります。

  12. [ステップ 5: 確認] で情報を確認し、[パイプラインの作成] を選択します。

  13. パイプラインが自動的に開始され、パイプラインによりサンプルが実行されます。パイプラインが Haml サンプルを HTML にビルドし、ウェブページを CodeDeploy デプロイの各 Amazon EC2 インスタンスにデプロイしている間、進行状況と成功/失敗メッセージを表示できます。

ステップ 3: パイプラインに別のステージを追加する

次に、テストステージ、テストアクションの順で、サンプルに含まれている Jenkins テストを使用するステージに追加し、ウェブページにコンテンツが含まれているかどうかを確認します。このテストは、デモンストレーションのみを目的としています。

注記

他のステージをパイプラインに追加しない場合は、パイプラインのステージ (Staging) へテストアクションを追加します。その前後にデプロイアクションを行います。

パイプラインにテストステージを追加する

インスタンスの IP アドレスを検索する

コードをデプロイしたインスタンスの IP アドレスを確認するには
  1. パイプラインのステータスが "Succeeded" と表示されたら、[Staging] ステージのステータス領域で [詳細] を選択します。

  2. [デプロイの詳細] (デプロイの詳細) セクションの [インスタンス ID] で、正常にデプロイされたいずれかのインスタンスの ID を選択します。

  3. インスタンスの IP アドレス (192.168.0.4 など) をコピーします。この IP アドレスは Jenkins テストで使用します。

デプロイのテスト用に Jenkins プロジェクトを作成する

Jenkins プロジェクトを作成するには
  1. Jenkins をインストールしたインスタンスで、Jenkins を開き、メインページから [New Item] (新しい項目) を選択します。

  2. [Item Name] に、Jenkins プロジェクトの名前 (MyTestProject など) を入力します。[Freestyle project] (フリースタイルプロジェクト)、[OK] の順に選択します。

    注記

    プロジェクトの名前が CodePipeline の要件を満たしていることを確認します。詳細については、「AWS CodePipeline のクォータ」を参照してください。

  3. プロジェクトの設定ページで、[Execute concurrent builds if necessary] (必要な場合に複数のビルドを並列実行する) チェックボックスをオンにします。[ソースコードの管理] で、[AWS CodePipeline] を選択します。EC2 インスタンスに Jenkins をインストールして、CodePipeline と Jenkins の統合用に作成した IAM ユーザーのプロファイルを使用して AWS CLI を設定した場合は、他のすべてのフィールドを空のままにします。

    重要

    Jenkins プロジェクトを設定していて、それが Amazon EC2 インスタンスにインストールされていないか、Windows オペレーティングシステムを実行している EC2 インスタンスにインストールされている場合は、プロキシホストとポートの設定に従ってフィールドに入力し、Jenkins と CodePipeline の統合用に設定した IAM ユーザーまたはロールの認証情報を指定します。

  4. [詳細設定] を選択してから、[カテゴリ] で [テスト] を選択します。

  5. [プロバイダ] に、ビルドプロジェクトで使用したのと同じ名前 (MyJenkinsProviderName など) を入力します。この名前は、このチュートリアルの後半でパイプラインにテストアクションを追加するときに使用します。

    注記

    この名前は、CodePipeline のアクションの命名要件を満たしている必要があります。詳細については、「AWS CodePipeline のクォータ」を参照してください。

  6. [Build Triggers] (トリガーのビルド) で、チェックボックスをすべてオフにし、[Poll SCM] (SCM のポーリング) を選択します。[Schedule] に、以下のようにスペースで区切ってアスタリスクを 5 つ入力します。

    * * * * *

    これは 1 分ごとに CodePipeline をポーリングします。

  7. [ビルド] で、[Add build step] (ビルドステップの追加) を選択します。Amazon Linux、RHEL、または Ubuntu Server インスタンスにデプロイする場合は、[シェルの実行] を選択します。次に、以下のように入力します。IP アドレスは、先ほどコピーした EC2 インスタンスのアドレスです。

    TEST_IP_ADDRESS=192.168.0.4 rake test

    Windows Server インスタンスにデプロイする場合は、[Execute batch command (バッチコマンドの実行)] を選択し、以下のように入力します。ここで、IP アドレスは、先ほどコピーした EC2 インスタンスのアドレスです。

    set TEST_IP_ADDRESS=192.168.0.4 rake test
    注記

    このテストでは、デフォルトのポート 80 を想定しています。別のポートを指定する場合は、以下のように test port ステートメントを追加します。

    TEST_IP_ADDRESS=192.168.0.4 TEST_PORT=8000 rake test
  8. [Add post-build action]、[AWS CodePipeline Publisher] の順に選択します。[追加] は選択しないでください。

  9. [保存] を選択して、Jenkins プロジェクトを保存します。

4 番目のステージを作成する

Jenkins テストアクションを含むステージをパイプラインに追加するには
  1. AWS Management Console にサインインして、CodePipeline コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

  2. [名前] で、作成したパイプラインの名前を選択します。

  3. パイプライン詳細ページで、[編集] を選択します。

  4. [編集] ページで [+ Stage (+ ステージの追加)] を選択して、ビルドステージの直後にステージを追加します。

  5. 新しいステージの名前フィールドに名前 (Testing など) を入力し、[+ Add action group (+ アクショングループの追加)] を選択します。

  6. [アクション名] に「MyJenkinsTest-Action」と入力します。[テストプロバイダ] で、Jenkins で指定したプロバイダ名 (MyJenkinsProviderName など) を選択します。[プロジェクト名] に、Jenkins で作成したプロジェクトの名前 (MyTestProject など) を入力します。[入力アーティファクト] で、デフォルト名が BuildArtifact の Jenkins ビルドからアーティファクトを選択し、[完了] を選択します。

    注記

    Jenkins テストアクションは Jenkins ビルドステップで構築されたアプリケーションで動作するため、テストアクションへの入力アーティファクトのビルドアーティファクトを使用します。

    入力アーティファクトと出力アーティファクト、およびパイプラインの構造の詳細については、「CodePipeline パイプライン構造リファレンス」を参照してください。

  7. [編集] ページで、[パイプラインの変更を保存] を選択します。[パイプラインの変更を保存] ダイアログボックスで、[保存して続行] を選択します。

  8. パイプラインに新しいステージが追加されましたが、パイプラインの別の実行をトリガーした変更がないため、そのステージのステータスは [まだ実行はありません] と表示されます。修正したパイプラインによりサンプルを実行するには、パイプラインの詳細ページで [リリースの変更] を選択します。

    パイプラインビューには、パイプラインのステージとアクション、それらの 4 つのステージを実行しているリビジョンの状態が表示されます。パイプラインがすべてのステージを実行するのにかかる時間は、アーティファクトのサイズ、ビルドとテストのアクションの複雑さ、その他の要因によって異なります。

ステップ 4: リソースをクリーンアップする

これらのチュートリアルが完了したら、使用したパイプラインおよびリソースを削除する必要があるため、このリソースに対する継続利用料金がかかることはありません。今後、CodePipeline を使用しない場合は、パイプラインを削除してから、CodeDeploy アプリケーション、関連付けられている Amazon EC2 インスタンス、アーティファクトの保存に使用した Amazon S3 バケットの順に削除します。今後使用しない場合は、GitHub リポジトリなどの他のリソースを削除するかどうかを検討することも必要です。

このチュートリアルで使用されているリソースをクリーンアップするには
  1. ローカル Linux、macOS または Unix マシンでターミナルセッションを開くか、ローカル Windows マシンでコマンドプロンプトを開き、delete-pipeline コマンドを実行して、作成したパイプラインを削除します。MySecondPipeline の場合は、次のコマンドを入力します。

    aws codepipeline delete-pipeline --name "MySecondPipeline"

    このコマンドは何も返しません。

  2. CodeDeploy リソースをクリーンアップするには、「クリーンアップ」の手順に従います。

  3. インスタンスリソースをクリーンアップするには、Jenkins をインストールした EC2 インスタンスを削除します。詳細については、「インスタンスのクリーンアップ」を参照してください。

  4. 追加のパイプラインを作成したり、CodePipeline を再利用したりしない場合は、パイプラインのアーティファクトの保存に使用した Amazon S3 バケットを削除します。バケットを削除するには、「バケットの削除」の手順に従います。

  5. このパイプラインに他のリソースを再利用しない場合は、それらのリソースを該当するガイダンスに従って削除することを検討してください。例えば、GitHub リポジトリを削除する場合は、GitHub ウェブサイトの「リポジトリの削除」の指示に従います。