AWS CodePipeline可以跟踪多个功能分支并在每个分支上运行测试吗?

时间:2017-10-11 19:25:52

标签: git amazon-web-services continuous-integration

使用Bitbucket和Bamboo,我能够让Bamboo跟踪每个功能分支并对每个功能分支运行测试,以便在拉取请求时,我能够看到分支是否通过了单元测试。

使用AWS CodePipeline,我无法判断我是否能够跟踪每个功能分支并在合并之前对其进行测试。

这可能吗?如果是这样,请指出我的文件。

5 个答案:

答案 0 :(得分:11)

不幸的是,似乎无法在本地触发CodePipeline中多个分支的构建。这对我来说有点意外,因为我使用过的每一个CI工具都提供了开箱即用的功能(GitLabCI,TravisCI,CircleCI,Bitbucket Pipelines,TeamCity)或者经过测试的插件(Jenkins)。

但是,现在可能有多种方法可以解决这个限制,这是我发现并可能使用/适应的方法:https://github.com/nicolai86/awesome-codepipeline-ci

我有同样的问题,我现在正在努力。 :)

答案 1 :(得分:6)

CodePipeline不是适合您的工具。创建一个单独的独立CodeBuild项目。它会像Travis等其他第三方CI服务一样工作。

确保选择“每次将代码更改推送到此存储库时都进行重建”源设置。这将触发从推送到任何分支以及其他Web挂钩事件的构建。创建的PR。您还可以创建过滤器来管理它们。

您可以通过多种方式将此“ CI阶段”连接到连续交付管道,这就是CodePipeline的目的:

  1. 最简单的方法是将CodeBuild用作将更改推送到管道源分支(通常是主分支)的门。
  2. 您还可以将在CodeBuild中创建的工件推送到ECR或S3,并从这些事件触发管道。
  3. 如果您想变得复杂一点,可以使用其他一些奇特的扑克游戏,例如。 SQS和Lambda。

我感到困惑,因为CodeBuild和CodePipeline是紧密相连的,但却是单独的工具。 CodePipeline确实使用CodeBuild,但是每个都有其自己的Git连接器,它们的工作方式不同。

答案 2 :(得分:4)

我一直在寻找解决此问题的方法。最终,我决定拥有一个可以从分支正则表达式触发的CodeBuild,通过将存档推送到特定的S3键来开始管道。就我而言,我还让CodeBuild进行了完整的构建/测试过程,但是您也可以将CodeBuild配置为仅提取代码,然后将其推入触发CodePipeline的S3键。

这是匹配2个分支的示例CodeBuild配置的一部分: Example showing a <code>Branch filter</code> matching 2 branches

然后,我将CodeBuild工件设置为转到单个存储桶中的单个键。

然后,我设置了一个CodePipeline,将Amazon S3源指向相同的密钥/存储桶。

答案 3 :(得分:3)

进一步审核表明,使用Cloudformation,您可以选择CodePipeline tracks

的分支
  

AWS CodeCommit(CodeCommit

     
      
  • PollForSourceChanges¹(可选)
  •   
  • RepositoryName(必填)
  •   
  • BranchName(必填)
  •   

您可以看到complete template的示例,但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,您可以创建可以将这些触发器用于Triggerslaunch a Lambda function

  

您可以通过在Lambda控制台中创建触发器来配置Lambda函数,作为函数的一部分。这是最简单的方法,因为在Lambda控制台中创建的触发器自动包含AWS CodeCommit调用Lambda函数所需的权限。如果您在AWS CodeCommit中创建触发器,则必须包含一个策略以允许AWS CodeCommit调用该函数。有关详情,请参阅Create a Trigger for an Existing Lambda FunctionExample 2: Create a Policy for AWS Lambda Integration

所以可能会发生如上所述设置CloudFormation模板以跟踪主分支。然后让CodeCommit触发存储库更改并调用Lambda函数,该函数使用Boto3到get_pipeline来检索主分支管道。

然后使用update_pipelinecreate_pipeline向现有主分支管道添加一个阶段,或者创建一个跟踪所需其他分支的全新管道。

这样,CodePipeline可以以有用的方式跟踪功能分支。

答案 4 :(得分:0)

用于构建多个分支的多个代码构建项目,将工件放到s3并从此处使用代码管道进行提取。

我想要实现的是: 在同一个代码构建项目下签出另一个分支,以便能够进行差异检查并为sitecore项目生成软件包。 例如,release \ branch <=> master =>然后仅生成最新项目的软件包,release \ branch项目,然后生成Zip。