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

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

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

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

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

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

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

重要

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

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

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

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

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

注記

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

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

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

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

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

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

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

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

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

ベストプラクティスとして、Jenkins サーバーをホストする EC2 インスタンスを起動し、IAM ロールを使用して、 を操作するために必要なアクセス許可をインスタンスに付与することを検討してください CodePipeline。

  1. にサインイン AWS Management Console し、https://console.aws.amazon.com/iam/ で 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. [次のステップ: アクセス許可] を選択します。[Attach permissions policies (アクセス許可ポリシーをアタッチする)] ページで、AWSCodePipelineCustomActionAccess 管理ポリシーを選択し、次に、[Next: Tags (次の手順: タグ)] を選択します。[次へ: レビュー] を選択します。

  5. レビューページのロール名 で、Jenkins 統合用に作成するロールの名前 (例: JenkinsAccess) を入力し、ロールの作成 を選択します。

Jenkins をインストールする EC2 インスタンスを作成するときは、ステップ 3: インスタンスの詳細を設定する で、インスタンスロール ( など) を選択してくださいJenkinsAccess

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

Jenkins と Plugin for 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 「Jenkins 用プラグイン」を選択し、「今すぐダウンロード」を選択し、再起動後にインストールします

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

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

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

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

    注記

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

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

  11. 詳細 を選択し、プロバイダー で、アクションのプロバイダーの名前を に表示されるとおりに入力します 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. ビルド後のアクションを追加 を選択し、パAWS CodePipeline ブリッシャー を選択します。[Add] を選択し、[Build Output Locations] でこの場所は空白のままにします。この設定はデフォルトです。ビルドプロセスの最後に圧縮ファイルが作成されます。

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

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

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

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

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

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

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

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

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

  6. サービスロール で、IAM でサービスロールを作成することを許可する新しいサービスロールを選択します。 CodePipeline

  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: デプロイステージ を追加し、 で作成した CodeDeploy アプリケーションとデプロイグループを再利用しますチュートリアル: シンプルなパイプラインを作成する (S3 バケット)。[デプロイプロバイダ] で、[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. 項目名 に、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 と の統合用に設定した IAM ユーザーまたはロールの認証情報を指定します CodePipeline。

  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. ビルド後のアクションを追加 を選択し、パAWS CodePipeline ブリッシャー を選択します。[追加] は選択しないでください。

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

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

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

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

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

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

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

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

    注記

    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 ウェブサイトの「リポジトリの削除」の手順に従います。