Amazon Web Services ブログ
サードパーティの Git リポジトリから AWS CodePipeline のビルドステータスを追跡する
(この記事は、Tracking the AWS CodePipeline build status from the third-party Git repository を翻訳したものです。)
AWS CodePipeline では、パイプラインのソースとしてサードパーティの Git リポジトリを使用できますが、ビルドステータスをサードパーティ Git リポジトリダッシュボードで確認できない場合があります。開発者がリポジトリで作業する場合、同じダッシュボードでビルド/パイプラインのステータスを確認できることが望ましいです。このブログでは、パイプライン/ビルドステータスをサードパーティのリポジトリに反映するソリューションの構築手順を説明します。これにより、開発者はコンテキストを切り替えることなくステータスを簡単に追跡できます。
CodePipeline は GitHub と Bitbucket をサポートしており、どちらも REST API を提供し、パイプライン実行に関連する情報をリポジトリにプッシュできます。このブログでは、CodePipeline と Git リポジトリ間のこの統合を設定する方法について説明します。
ソリューション概要
サードパーティリポジトリをソースとして CodePipeline を設定すると、コミットがリポジトリにプッシュされたときにパイプラインがトリガーされます。このソリューションでは、パイプラインが実行されると、すべてのステータスの変更が Amazon Simple Notification Service (Amazon SNS) トピックにイベントとしてプッシュされます。AWS Lambda 関数はこの情報を処理し、REST API 経由でリポジトリにステータスをプッシュします。
CodePipeline コンソールを使用する代わりに、サードパーティの Git リポジトリ (Bitbucket または GitHub) でパイプラインのステータスを直接表示できます。次の図は、このアーキテクチャを示しています。
このソリューションを実装するには、次にあげる大まかな手順を実施します。
- リポジトリ(BitbucketまたはGitHub)の REST API 認証情報を作成します。
- 提供された AWS CloudFormation テンプレートをデプロイして、必要なリソースを作成します。
- Git 統合をテストします。
前提条件
このウォークスルーでは、次の前提条件が必要です。
- AWS アカウント
- Bitbucket または GitHub をソースコードプロバイダーとしてセットアップした既存の CodePipeline パイプライン (詳細については、それぞれ Bitbucket 接続または GitHub 接続を参照してください)
- API 認証情報を作成する GitHub または Bitbucket アカウント
- AWS CodeStar が通知に利用する AWS Identity and Access Management (IAM) ロール (AWSServiceRoleForCodeStarNotifications)
- この CloudFormation テンプレートをダウンロードし、統合用のインフラストラクチャをセットアップします。
サードパーティソースコードプロバイダーの API 認証情報を作成する
まず、Lambda 関数がリポジトリ (Bitbucket または GitHub) と通信できるようにする認証情報を作成します。
Bitbucket
Bitbucket を使用している場合は、以下の手順で認証情報(アプリパスワード)を作成します。
- Bitbucket アカウントにサインインします。
- Personal Settings メニューの ACCESS MANAGEMENT で、App passwords を選択します。
- Create app password を選択します。
- Label には、パスワードを識別するための情報を入力します。
- Permissions の Repositories で、 Write を選択します。
- Create をクリックします。
詳細については、Bitbucket API のドキュメントを参照してください。
GitHub
GitHub の場合は、以下の手順に従って個人アクセストークンを作成します。
- GitHub アカウントにサインインします。
- Settings で Developer settings を選択します。
- Personal access tokens を選択します。
- Generate new token を選択します。
- Note に、トークンの説明を入力します。
- Select scopes で、 repo:status を選択します。
- 作成したアクセストークンは 1 回しか表示できないため、必ずコピーして保管してください。
詳細については、GitHub REST API を参照してください。
CloudFormation テンプレートをデプロイする
SNS トピック、Lambda 関数、CodePipeline 通知ルール、および関連するリソースを作成するには、AWS CloudFormation を使用します。提供された CloudFormation テンプレートを cloudformation.yaml
という名前で保存し、次の手順を実行します。
- AWS CloudFormation コンソールで、Create stack をクリックします。
- With new resources を選択します。
- 保存したテンプレートファイルをアップロードします。
- Stack name に、スタック名を入力します。
- IntegrationPass に、前の手順で生成した認証情報を入力します。
- IntegrationType に、Bitbucket または GitHub を選択します。
- IntegrationUser に、前の手順で認証情報を作成するために使用した Bitbucket または GitHub ログイン名を入力します。
- PipeLineName に、通知統合を設定する CodePipeline のパイプライン名を入力します。
- Next をクリックします。
- オプションの設定ページでは、デフォルト値を変更せず Next をクリックします。
- レビューページでは、I acknowledge that AWS CloudFormation might create IAM resources. にチェックを入れます。
- Create stack をクリックします。
スタックの作成に失敗すると、次のエラーメッセージが表示されることがあります。
AWS CodeStar Notifications could not create the AWS CloudWatch Events managed rule in your AWS account. If this is your first time creating a notification rule, the service-linked role for AWS CodeStar Notifications might not yet exist. Creation of this role might take up to 15 minutes.
これを修正するには、IAM ロール AWSServiceRoleForCodeStarNotifications が AWS CodeStar によって作成されたことを確認します。次に、失敗した CloudFormation スタックを削除し、再度プロビジョニングします。
統合をテストする
統合をテストするには、CodePipeline がパイプラインを実行するソース Git リポジトリにコミットを行います。パイプラインステータスの更新は、リポジトリの Web サイト自体のコミットのリストに表示されます。
次のスクリーンショットは、Bitbucketリポジトリのコミットのリストを示しています(https://bitbucket.org/${workpace}/${repository}/commits/)。
次のスクリーンショットは、GitHub リポジトリ(https://github.com/${owner}/${repository}/commits/main)のコミットのリストを示しています。
クリーンアップ
今後の課金が発生しないように、前のステップで CloudFormation テンプレートによってデプロイされたリソースを削除することを忘れないでください。
まとめ
Git リポジトリからパイプラインのステータスを確認できれば、コード関連の重要な情報をより簡単に確認できます。このソリューションにより、Bitbucket または GitHub リポジトリと CodePipeline 間のシームレスなナビゲーションが可能になります。これで、コードレビュープロセスに集中したり、コンソールを切り替えることなく、ブランチ間でコードをマージしてパイプラインの状態を表示することができます。
翻訳はソリューションアーキテクトの松本 雅博が担当しました。原文はこちらです。