web-dev-qa-db-ja.com

AWS CodePipelineは複数の機能ブランチを追跡し、それぞれでテストを実行できますか?

BitbucketとBambooを使用すると、Bambooですべての機能ブランチを追跡し、それぞれでテストを実行できるようになったため、プルリクエスト時に、ブランチがユニットテストに合格したかどうかを確認できました。

AWS CodePipeline を使用すると、各機能ブランチを追跡し、マージする前にテストを実行できるかどうかわかりません。

これは可能ですか?その場合は、ドキュメントを参照してください。

残念ながら、ネイティブでCodePipelineの複数のブランチからビルドをトリガーすることはできません。私が使用した他のすべてのCIツールがすぐにこの機能を提供しているため(GitLabCI、TravisCI、CircleCI、Bitbucket Pipelines、TeamCity)、または戦闘テスト済みプラグイン(Jenkins)を使用しているので、少し驚きです。

ただし、現時点でこの制限を回避する方法は複数ある可能性があります。これは私が見つけたもので、使用/適応する可能性があります。 https://github.com/nicolai86/awesome-codepipeline-ci

私はこれとまったく同じ問題を抱えており、現在取り組んでいます。 :)

12

私はまさにこの問題の解決策を探していました。最終的に、ブランチの正規表現からトリガーできるCodeBuildを使用して、アーカイブを特定のS3キーにプッシュすることでパイプラインを開始しました。私の場合、CodeBuildに完全なビルド/テストプロセスを実行させましたが、CodePipelineをトリガーするS3キーをプッシュするだけでCodeBuildを構成することもできます。

2つのブランチに一致するCodeBuild構成の例の一部を次に示します。 Example showing a <code>Branch filter</code> matching 2 branches

次に、CodeBuildアーティファクトを設定して、1つのバケット内の1つのキーに移動します。

次に、同じキー/バケットを指すAmazon S3ソースを使用してCodePipelineをセットアップします。

4
Brandon

さらに検討すると、Cloudformationを使用すると、 CodePipelineトラック というブランチを選択できることがわかります。

AWS CodeCommit(CodeCommit

  • PollForSourceChanges¹(オプション)
  • RepositoryName(必須)
  • BranchName(必須)

完全なテンプレート の例を見ることができますが、CodePipelineステージは次のようになります。

Name: CheckoutSourceTemplate
ActionTypeId:
  Category: Source
  Owner: AWS
  Version: 1
  Provider: CodeCommit
Configuration:
  PollForSourceChanges: True
  RepositoryName: !GetAtt [PipelineRepo, Name]
  BranchName: master
OutputArtifacts:
  - Name: TemplateSource
RunOrder: 1

CodeCommit Repo's を使用すると、これらのトリガーを使用して Lambda関数を起動 にすることができる トリガー を作成できます。

Lambdaコンソールで関数の一部としてトリガーを作成することにより、Lambda関数を設定できます。 Lambdaコンソールで作成されたトリガーには、AWS CodeCommitがLambda関数を呼び出すために必要なアクセス許可が自動的に含まれるため、これは最も簡単な方法です。 AWS CodeCommitでトリガーを作成する場合、AWS CodeCommitが関数を呼び出すことを許可するポリシーを含める必要があります。詳細については、「 既存のLambda関数のトリガーを作成する 」および 例2:AWS Lambda統合のポリシーを作成する を参照してください。

そのため、上記のようなCloudFormationテンプレートをセットアップして、マスターブランチを追跡することができます。次に、リポジトリの変更時にCodeCommitトリガーを使用し、Boto3を使用するLambda関数を呼び出して get_pipeline マスターブランチパイプラインを取得します。

次に、 update_pipeline または create_pipeline 既存のマスターブランチパイプラインにステージを追加するか、目的の追加ブランチを追跡するまったく新しいパイプラインを作成します。

このようにして、CodePipelineは便利な方法で機能ブランチを追跡できます。