git AWS CodePipeline能否跟踪多个特性分支并在每个分支上运行测试?

ee7vknir  于 2022-12-28  发布在  Git
关注(0)|答案(6)|浏览(115)

使用Bitbucket和Bamboo,我可以让Bamboo跟踪每个特性分支并对每个分支运行测试,这样,在拉取请求时,我就可以看到分支是否通过了单元测试。
对于AWS CodePipeline,我无法判断是否能够跟踪每个特性分支并在合并之前对它们运行测试。
这可能吗?如果可能,请告诉我文档。

nkcskrwz

nkcskrwz1#

CodePipeline不是适合您的工具。创建一个单独的、独立的CodeBuild项目。它的工作方式与其他第三方CI服务(如Travis)非常相似。
您可以通过多种方式将此“CI阶段”连接到连续的交付管道,这正是CodePipeline的用途:
1.最简单的方法是使用CodeBuild作为一个门,将更改推送到管道源分支,通常是master。
1.您还可以将在CodeBuild中创建的构件推送到ECR或S3,并从这些事件触发管道。
1.如果你想得到花式,使用一些其他的jiggery pokery如事件,SQS和Lambda。
我也有同样的困惑,因为CodeBuild和CodePipeline是紧密相连的,但也是独立的工具。CodePipeline确实使用CodeBuild,但每个都有自己的Git连接器,工作方式不同。

kgsdhlau

kgsdhlau2#

我一直在寻找这个问题的解决方案。最后我决定使用CodeBuild,它可以从分支正则表达式触发,通过将归档推送到特定的S3键来开始管道。在我的例子中,我也让CodeBuild完成我的完整构建/测试过程,但您也可以配置CodeBuild,使其只拉取代码并将其推送到触发CodePipeline的S3键。
以下是匹配2个分支的示例CodeBuild配置的一部分:

然后,我将CodeBuild工件设置为转到单个桶中的单个键。
然后,我设置了一个CodePipeline,其中Amazon S3源指向同一个键/桶。

0wi1tuuw

0wi1tuuw3#

进一步的研究表明,使用Cloudformation,您可以选择CodePipeline tracks的分支,
AWS代码提交(CodeCommit

  • 针对源更改的轮询¹(可选)
  • 存储库名称(必填)
  • 分支机构名称(必填)

您可以看到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,您可以创建Triggers,它可以使用这些触发器来执行launch a Lambda function
可以通过在Lambda控制台中创建触发器作为函数的一部分来配置Lambda函数。这是最简单的方法,因为在Lambda控制台中创建的触发器会自动包含AWS CodeCommit调用Lambda函数所需的权限。如果在AWS CodeCommit中创建触发器,则必须包含允许AWS CodeCommit调用函数的策略。有关详细信息,参见Create a Trigger for an Existing Lambda Function和实施例2:创建AWS Lambda集成策略。
因此,我们可以像上面那样设置一个CloudFormation模板来跟踪主分支,然后让CodeCommit触发库更改,并调用Lambda函数,该函数使用Boto3到get_pipeline来检索主分支管道。
然后使用update_pipelinecreate_pipeline将阶段添加到现有的主分支管道,或创建跟踪所需的附加分支的全新管道。
这样,CodePipeline就可以以一种有用的方式跟踪特征分支。

rnmwe5a2

rnmwe5a24#

多个代码构建项目来构建多个分支,将工件放到s3中,然后从那里使用代码管道进行拾取。
我想达到的目标是 checkout 同一代码构建项目下的不同分支,以便能够进行差异检查并为站点核心项目生成包。即,先发布\分支〈=〉master =〉,然后仅生成最新项目的包,再发布\分支项目,然后压缩。

az31mfrm

az31mfrm5#

我已经实现了你想做的创建短暂的管道,我有一个代码构建,寻找分支的回购这不是主要的,是触发公关。
当代码构建运行时,它提取分支名称,然后使用它现在知道的分支动态地创建一个全新的代码管道,这是用terraform完成的。当更改合并到master时,我然后销毁临时环境和临时管道。
我想不出创建多分支管道的更简洁的解决方案。

kgsdhlau

kgsdhlau6#

或者,可以使用专用分支来触发流水线(例如:管道分支)。如果要测试分支中的代码,可以将管道分支的引用更改为自定义分支(例如:特征分支),使得流水线分支将基本上“指向”定制分支的最新提交并将触发代码流水线执行。
我们还可以做的是,通过更进一步,我们可以创建一个自定义GitHub操作,它将触发Github中的上述分支引用更改,以根据开发人员的需要完全自动化管道触发。

相关问题