TOPコラム一覧CodePipeline と CodeBuild でユースカジノ 登録のスタイルに合わせた CI/CD 環境を実現する ~ Pipeline のトリガー編 ~

CodePipeline と CodeBuild でユースカジノ 登録のスタイルに合わせた CI/CD 環境を実現する ~ Pipeline のトリガー編 ~

はじめに

こんにちは、Build ユースカジノ 登録でソリューションアーキテクトをしている丸山です。

私が普段業務で携わるソフトウェア開発の現場ではプログラムのソースコードを Git を使ってバージョン管理することが多く、開発/リリースを円滑に進めていくにあたり Git のユースカジノ 登録戦略と CI/CD 環境も事前に関係者と合意を取って進めています。

Git のユースカジノ 登録戦略には今回ご紹介する Git-flow 以外にも GitHub flow、 GitLab flow などいくつか種類がありますので興味を持っていただけましたら詳しく調べていただければと思います。

今回は、Git-flow というユースカジノ 登録戦略を AWS の Code シリーズを使って実現する例を使って、Pipeline のトリガー条件について解説します。

Git-flow とは?

まず、Git-flow について簡単に説明をします。

Git-flow とは Git を使って開発をする場合のユースカジノ 登録戦略の一つです。
下記に Git-flow での各ユースカジノ 登録の流れを図示します。

ユースカジノ 登録

こちらの図は下記のサイトを参考に、一部表現を変えて記載させていただきました。

出典:https://nvie.com/posts/a-successful-git-branching-model/

上記では main、 develop が名前が予め決まっているユースカジノ 登録、それ以外のものが必要に応じて作成/削除が繰り返し行われるユースカジノ 登録です。
ユースカジノ 登録とは `目的ごとに作成された作業スペース` と捉えていただけると理解が進みやすいのではないかと思います。

全てを説明すると長くなってしまいますので、main、 develop、 feature ユースカジノ 登録に絞ってそれぞれの用途を整理します。

  • main ユースカジノ 登録
    プロダクトとしてリリースするソースコードを管理するためのスペース
  • develop ユースカジノ 登録
    ユースカジノ 登録が終わった機能を管理しておくためのスペース
  • feature ユースカジノ 登録
    ユースカジノ 登録うためのスペース
    作業開始時に外時点の develop ユースカジノ 登録から分岐して作成する
    開発/テスト/レビューが完了したら develop ユースカジノ 登録に merge する

このようにそれぞれのユースカジノ 登録は用途が明確に分かれており、ユースカジノ 登録で行った変更は merge というソースコードを合流させる作業をしない限りはそれぞれのユースカジノ 登録で独立して存在しているため、複数の開発者が同時に作業をしていても作業時点では競合が発生せずに開発を進めることができます。

アジャイル開発では機能を小さな単位に分けて短期間で開発を進めていきますので、feature ユースカジノ 登録を使った機能開発が頻繁に発生することになります。

私の担当したアジャイル開発案件では 1 人の開発者が 1 つの機能を担当して順次開発を行っておりましたので、それぞれの開発者は自分自身が担当になっている機能を feature ユースカジノ 登録を各自で作成して開発していました。

Git-flow で必要になる CI/CD のユースカジノ 登録

Git-flow の流れについて説明しましたが、 Git-flow に従ってユースカジノ 登録を進めて行く場合にどのような CI/CD の機能が必要となるのか、まず CI/CD のフローを考えてみます。

ユースカジノ 登録

個々の機能開発で使われる feature ユースカジノ 登録は図の一番上の flow です。
各開発者は develop ユースカジノ 登録から作業用の feature ユースカジノ 登録を作成し、そのユースカジノ 登録上で機能開発を行いながら必要なユニットテストなども書いて行きます。
これを Git のリポジトリに Push した際には build、 test、 deploy などの作業が必要になります。

feature ユースカジノ 登録での機能開発が完了したものは develop ユースカジノ 登録に merge されることになります。
このときにも build、 test、 deploy の作業が必要となります。

最後にリリース時に使用することになる main ユースカジノ 登録ですが、こちらは develop から release branch を介して merge と tag 付けがされたときに build、 test、 deploy が必要となってきます。

これらのワークフローを手動で実施することもできなくはありませんが、アジャイルユースカジノ 登録のようにユースカジノ 登録/テスト/リリースを短い期間で繰り返す (私の携わった案件では 2 週間) ような状況を考えると、手動でこれらのワークフローを回すのは現実的ではないと思われます。

CodePipeline のトリガーに CodeBuild を使用する

さて、いよいよ AWS ユースカジノ 登録の出番がやってきました。

AWS には Code シリーズと呼ばれるツールがあり、それらを適切に組み合わせる事によりユースカジノ 登録に関連するワークフローの自動実行環境を構築することが可能になります。

Code シリーズには下記のユースカジノ 登録サービスが存在しておりますが、今回は CodeBuild と CodePipeline を連携させる例をご紹介します。

  • CodeCommit
  • CodeArtifact
  • CodeBuild
  • CodeDeploy
  • CodePipeline

それぞれの詳細なユースカジノ 登録説明は公式のドキュメントに記載がありますので、今回は Git-flow の仕組みを実現させるために必要な特徴に絞ってご紹介します。

ご紹介する例の全体の構成図です。

今回はソースコードリポジトリとして GitHub を使い、Pipeline のトリガーのために CodeBuild と S3 Event Notification などを組み合わせ、ユースカジノ 登録は Pipeline で実行する例となっています。

ユースカジノ 登録

まずワークフロー全体をオーケストレーションする CodePipeline ですが、ビルド、テスト、デプロイに関連する様々な処理をどのユースカジノ 登録順番、並列度で行うかなどを設定することができ、Pipeline の処理状況が AWS Management Console 上でわかりやすく可視化されます。

指定できる処理の中には手動承認フローも存在しており、例えば本番環境にデプロイする前には責任者が内容や状況を確認して許可を出すまではデプロイを待機する、といったことも可能です。

以下が Pipeline を Management Console で見たときの例です。今回は Pipeline トリガーに関する説明なので簡素化のため Pipeline 内部は Unit test と Manual Approval のみのワークフロー構成となっておりますが、実際にはこれ以外にも CodeDeploy、 CloudFormation を使った処理など、実際のユースカジノ 登録/テスト/デプロイ戦略に従って必要な処理を追加して使用していくことになります。

ユースカジノ 登録は CodePipeline を使って定義することにしましたが、ユースカジノ 登録の実行開始の条件を指定しなければ毎回手動で実行することになってしまいます。

Pipeline の実行トリガーとなる処理は Source Action と呼ばれ、ECR、 S3、 CodeCommit、 CodeStarConnection(BitBucket、 GitHub) などが指定可能です。

それぞれのユースカジノ 登録で Source Action を定義する際の設定値については下記のアクション構造リファレンス (公式ドキュメント) に記載がありますのでそちらをご確認ください。

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/action-reference.html

以下に CodePipeline で GitHub を CodeStartConnection 経由で使用する場合の CloudFormation 設定の一部を掲載します。

※ この記事では Pipeline V1 について解説しています。2024 年 2 月現在、Pipeline V2 を使用している場合は Git の tag に基づいたトリガーは可能になっています。

Stages:
  - Name: "Source"
    Actions:
      - Name: "Fetch"
        ActionTypeId:
          Category: "Source"
          Owner: "AWS"
          Version: "1"
          Provider: "CodeStarSourceConnection"
        Configuration:
          ConnectionArn: "CodeStar connection の ARN"
          FullRepositoryId: "GitHub のリポジトリ名"
          BranchName: "ユースカジノ 登録名"

詳しい設定値については下記の公式ドキュメントをご確認ください。

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/action-reference-CodestarConnectionSource.html#action-reference-CodestarConnectionSource-type

この設定で注目すべきポイントは Configuration 以下で設定される `FullRepositoryId` と `BranchName` です。

FullRepositoryId は GitHub のリポジトリが保管されている場所を表すもので、`〈GitHub ユーザ名 または Organization 名〉/〈リポジトリ名〉`というユースカジノ 登録形でリポジトリの所有者とリポジトリ名を合わせたものを設定します。

BranchName は変更検知を行う Git のユースカジノ 登録名を指しており、例えば develop ユースカジノ 登録への Push をトリガーにワークフロー起動する場合は `develop` と指定をします。

ここで改めて Git-flow で使われるユースカジノ 登録を思い出してみます。

  • main ユースカジノ 登録
    プロダクトとしてリリースするソースコードを管理するためのスペース
  • develop ユースカジノ 登録
    ユースカジノ 登録が終わった機能を管理しておくためのスペース
  • feature ユースカジノ 登録
    ユースカジノ 登録うためのスペース
    作業開始時に外時点の develop ユースカジノ 登録から分岐して作成する
    開発/テスト/レビューが完了したら develop ユースカジノ 登録に merge する

main、 develop については最初からユースカジノ 登録名は明確なので CodePipeline でトリガーすることができそうですが、毎回名前が変更される feature ユースカジノ 登録への対応は難しそうです。

※ CodePipeline の設定で指定する BranchName にワイルドカードは使えませんので、例えば feature ユースカジノ 登録の名前には `feat-` という prefix を付けるという運用を取り入れたとしても BranchName で `feat-*` という指定をすることはできません。

また、CodeCommit や GitHub など Git のマネージドサービスを利用したユースカジノ 登録をする場合、ソースコードのレビュー時に Pull Request (追加した変更の差分を可視化して確認する機能) を使う場合が多いと思いますが、CodePipeline 単体ですと Pull Request をトリガーとしてワークフローを起動することができないため何らかの工夫が必要になってきます。

CodePipeline だけで解決が難しいのであれば、他のユースカジノ 登録を組み合わせて解決しようというのが今回のアプローチです。
今回は Webhook によるトリガーを使用する際に条件を柔軟に設定可能な CodeBuild を使用してみユースカジノ 登録と思います。

先程の CodePipeline 例と同様に CloudFormation 設定値で CodeBuild の設定も確認してみます。

以下は `feature ユースカジノ 登録への Push イベントのみをトリガーに処理を開始する` という条件を実現するために必要な CodeBuild の Project 設定の一部です。

Type: AWS::CodeBuild::Project
  Properties:
    Triggers:
      Webhook: true
      FilterGroups:
        - - Type: EVENT
            Pattern: "PUSH"
            ExcludeMatchedPattern: false
          - Type: HEAD_REF
            Pattern: "^refs/heads/main$"
            ExcludeMatchedPattern: true
          - Type: HEAD_REF
            Pattern: "^refs/heads/develop$"
            ExcludeMatchedPattern: true
          - Type: HEAD_REF
            Pattern: "^refs/tags/.*"
            ExcludeMatchedPattern: true

CodeBuild の GitHub Webhook 連携に関する詳しい仕様について下記の公式ドキュメントをを参照ください。

https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/github-webhook.html

CodeBuild の Webhook 設定には FilterGroup というものが存在しており、これを指定することでどのユースカジノ 登録条件のときにトリガーするのか (ExcludeMatchedPattern が false の設定)、またはどのユースカジノ 登録条件のときはトリガーしないのか (ExcludeMatchedPattern が true の設定) を設定することができます。

上記では 4 件の条件が指定されておりますが、これらを日本語で記載すると以下のユースカジノ 登録意味になります。

  • Event が PUSH (GitHub へのソースコードの Push) である場合に実行する
  • ただし、ユースカジノ 登録が main である場合は実行しない
  • ただし、ユースカジノ 登録が develop である場合は実行しない
  • ただし、tag の push である場合は実行しない

これら FilterGroup の条件を合わせて評価すると main、 develop 以外のユースカジノ 登録、すなわち feature ユースカジノ 登録への Push に対して処理がトリガーされることになりますので、CodePipeline 単体では実現できなかったトリガーを実現することができました。
(今回単純化のため hot-fix や release ユースカジノ 登録については考慮しておりません)

まとめ

今回は Git のユースカジノ 登録戦略の一つである Git-flow を題材として、CodePipeline と CodeBuild の実行トリガーの違いについて解説しました。

CodePipeline はユースカジノ 登録からリリースまでの様々な作業をワークフローとして定義/可視化することが魅力ですが、ワークフローの起動条件が要件にマッチせず採用できなかったという方や、運用でカバーされている方もいらっしゃるのではないかと思います。

Management Console 上のボタン 1 クリックで簡単にできあがるような仕組みではありませんが、今回のように CodeBuild を CodePipeline の前段で使用することでトリガー条件を柔軟に設定することができるようになり、ユースカジノ 登録のサイクルにあった CI/CD パイプラインを構築できるようになると思いますので参考にしていただければ幸いです。

今回紹介した CodeBuild と CodePipeline 組み合わせる例以外にも、具体的なソースコードを掲載しながら AWS のユースカジノ 登録の使い方や案件で得た知見などを Build ユースカジノ 登録の note にて公開しています。興味のある方はこちらの記事もご覧いただければ幸いです。

カジノゲームは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

Build ユースカジノ 登録 note 「Build の AWS ナレッジ通信」

https://note.com/build_service/m/m8220a76aed15

関連ユースカジノ 登録

/solutions/build_sales/

お問い合わせ



【著者プロフィール】

丸山 貴嗣(まるやま たかし)

伊藤忠テクノソリューションズ株式会社 ソリューションアーキテクト

自社 Cloud サービスの企画ユースカジノ 登録からプログラマーに転向し、モバイルアプリ、Web アプリ、API ユースカジノ 登録など様々なユースカジノ 登録プロジェクトに従事。 現在は Build サービスのソリューションアーキテクトとして Cloud を活用したシステム/アプリの設計/ユースカジノ 登録の領域で活動中。

丸山 貴嗣(まるやま たかし)

TOPコラム一覧CodePipeline と CodeBuild でユースカジノ 登録のスタイルに合わせた CI/CD 環境を実現する ~ Pipeline のトリガー編 ~

pagetop