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

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

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

これで、「チュートリアル: シンプルなパイプラインを作成する (S3 バケット)」または「チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)」に最初のパイプラインが作成されたため、より複雑なパイプラインを作成できるようになりました。このチュートリアルでは、ソースとして GitHub リポジトリを使用し、プロジェクトをビルドするための Jenkins ビルドサーバーおよびビルドしたコードをステージングサーバーにデプロイするための CodeDeploy アプリケーションにデプロイするための CodeDeploy アプリケーションを使用します。パイプラインが作成されたら、これを編集して、テストアクションを含むステージを追加してコードをテストします。この際、Jenkins も使用します。

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

重要

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

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

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

ステップ 1: 前提条件を完了します。

Jenkinsと統合するには、AWS CodePipelineCodePipeline で使用する 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 service ] (AWS サービス) を選択します。[Choose the service that will use this role (このロールを使用するサービスを選択)] で、[EC2] を選択します。[Select your use case (ユースケースを選択)] で、[EC2] を選択します。

  4. [Next: (次へ:)] を選択します アクセス許可. リポジトリの []許可ポリシーのアタッチページで、[] を選択します。AWSCodePipelineCustomActionAccess管理ポリシーを選択し、次へ: タグ [Next: (次へ:)] を選択します 確認.

  5. リポジトリの []確認ページで、[]ロール名に、Jenkins 統合専用として作成するロールの名前 (たとえば、ジェンキンスアクセス) を選択してから、[] を選択します。ロールの作成

Jenkins をインストールする EC2 インスタンスを作成すると、ステップ 3: インスタンスの詳細の設定の場合は、必ずインスタンスロール (ジェンキンスアクセス).

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

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

Jenkins と CodePipeline プラグインをインストールするには

  1. Jenkins をインストールする EC2 インスタンスを作成してから、ステップ 3: インスタンスの詳細の設定次に、作成したインスタンスロール (たとえば、ジェンキンスアクセス). EC2 インスタンスの作成の詳細については、以下を参照してください。Amazon EC2 インスタンスの起動Amazon EC2 ユーザーガイド

    注記

    使用する Jenkins リソースがすでにある場合は、特別な IAM ユーザーを作成し、特別な 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 プラグイン[] を選択して、[] を選択します。再起動後にダウンロードしてインストールする

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

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

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

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

    注記

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

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

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

    注記

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

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

    * * * * *

    CodePipeline は毎分ポーリングします。

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

    rake
    注記

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

  14. 選択ポストビルドアクションを追加する[] を選択してから、[AWSCodePipeline パブリッシャー。[Add] を選択し、[Build Output Locations] でこの場所は空白のままにします。この設定はデフォルトです。ビルドプロセスの最後に圧縮ファイルが作成されます。

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

ステップ 2: CodePipeline でのパイプラインの作成

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

CodePipeline の自動リリースプロセスを作成するには

  1. にサインインします。AWS Management ConsoleCodePipeline コンソール (http://console.aws.amazon.com/codesuite/codepipeline/home

  2. 必要に応じて、リージョンセレクターを使用し、パイプラインリソースの配置先のリージョンに切り替えます。たとえば、前のチュートリアルでリソースをus-east-2[Region] を選択する場合は、リージョンセレクターが米国東部 (オハイオ) に設定されていることを確認します。

    CodePipeline で使用できるリージョンとエンドポイントの詳細については、」AWS CodePipelineエンドポイントとクォータ

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

  4. リポジトリの []ステップ 1: パイプラインの設定の選択ページで、[]パイプライン名に、パイプラインの名前を入力します。

  5. Eclipseサービスロール] で、新しいサービスロールCodePipeline に IAM でのサービスロールの作成を許可します。

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

  7. Eclipseステップ 2: ソースステージを追加する, でソースプロバイダー] で、GitHub[] を選択してから、[GitHub Connect する。これにより、GitHub に接続するための新しいブラウザーウィンドウが開きます。サインインするように求められたら、GitHub の認証情報を入力します。

    重要

    提供しないでくださいAWSGitHub ウェブサイトの「」の認証情報を入力します。

    GitHub を選択すると、CodePipeline がパイプライン用に GitHub でウェブフックを作成することを知らせるメッセージが表示されます。

    GitHub に接続したら、このチュートリアルで使用するサンプル (aws-codepipeline-jenkins-aws-codedeploy_linux.zip または AWSCodePipeline-Jenkins-AWSCodeDeploy_Windows.zip) をプッシュするリポジトリとブランチを選択してから、[

    注記

    GitHub では、CodePipeline などのアプリケーションで使用できる OAuth トークンの数に制限があります。この制限を超える場合は、CodePipeline が既存のトークンを再利用して再接続できるように接続を再試行します。

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

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

    注記

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

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

  11. パイプラインが自動的に開始され、パイプラインによりサンプルが実行されます。パイプラインが 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 の要件を満たしていることを確認します。詳細については、「のクォータAWSCodePipeline」を参照してください。

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

    重要

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

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

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

    注記

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

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

    * * * * *

    CodePipeline は毎分ポーリングします。

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

    TEST_IP_ADDRESS=192.168.0.4 rake test

    Windows Server インスタンスにデプロイする場合は、[] を選択します。バッチコマンドの実行次に、以下のように入力します。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. 選択ポストビルドアクションを追加する[] を選択してから、[AWSCodePipeline パブリッシャー。[追加] は選択しないでください。

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

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

Jenkins テストアクションを含むステージをパイプラインに追加するには

  1. にサインインします。AWS Management ConsoleCodePipeline コンソール (http://console.aws.amazon.com/codesuite/codepipeline/home

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

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