繁体   English   中英

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

[英]Can AWS CodePipeline track multiple feature branches and run tests on each?

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

使用AWS CodePipeline时,我无法确定我是否能够跟踪每个功能分支并在合并之前对它们运行测试。

这可能吗? 如果是这样,请指出文档。

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

借助AWS CodePipeline ,我无法确定在合并之前是否能够跟踪每个功能分支并对其进行测试。

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

我正在寻找解决这个问题的方法。 最终我决定使用 CodeBuild,它可以从分支正则表达式触发,通过将存档推送到特定的 S3 键来开始管道。 就我而言,我还让 CodeBuild 执行我的完整构建/测试过程,但您也可以将 CodeBuild 配置为仅拉取代码并将其推送到触发 CodePipeline 的 S3 密钥。

这是匹配 2 个分支的示例 CodeBuild 配置的一部分: 显示匹配 2 个分支的 <code>Branch filter</code> 的示例

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

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

CodePipeline 不是适合您的工具。 创建一个单独的、独立的 CodeBuild 项目。 它将与 Travis 等其他 3rd 方 CI 服务非常相似。

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

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

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

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

进一步审查表明,使用 Cloudformation,您可以选择CodePipeline 跟踪的分支,

AWS CodeCommit ( CodeCommit )

  • PollForSourceChanges¹(可选)
  • 存储库名称(必填)
  • 分支名称(必填)

您可以看到完整模板的示例,但 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回购的,你可以创建触发器,可以使用这些触发器来启动一个lambda函数

您可以通过在 Lambda 控制台中创建触发器作为函数的一部分来配置 Lambda 函数。 这是最简单的方法,因为在 Lambda 控制台中创建的触发器会自动包含 AWS CodeCommit 调用 Lambda 函数所需的权限。 如果您在 AWS CodeCommit 中创建触发器,则必须包含一个策略以允许 AWS CodeCommit 调用该函数。 有关更多信息,请参阅为现有 Lambda 函数创建触发器示例 2:为 AWS Lambda 集成创建策略

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

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

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

多个代码构建项目来构建多个分支,将您的工件放到 s3 并从那里获取代码管道。

我想要实现的是:在同一个 codebuild 项目下签出不同的分支,以便能够进行差异检查并为 sitecore 项目生成包。 即 release\\branch <=> master => 然后只生成最新项目的包,release\\branch 项目,然后是 Zip。

我已经通过创建临时管道实现了您想做的事情,我有一个代码构建,它在 repo 上查找不是主要分支并且在 PR 上触发的分支。

当该代码构建运行时,它提取分支名称,然后使用它现在知道的分支动态创建一个全新的代码管道,这是通过 terraform 完成的。当更改合并到 master 时,我然后销毁临时环境和临时管道。

我想不出更简洁的解决方案来创建多分支管道。

或者,可以做的是有一个专用分支来触发管道(例如:管道分支)。 一旦你想从一个分支测试代码,你可以将管道分支的引用更改为你的自定义分支(例如:feature-branch),这样管道分支将基本上“指向”自定义分支的最新提交并将触发代码管道执行。

我们还可以做的是,通过更进一步,我们可以创建一个自定义 GitHub 操作,它将触发 Github 内的上述分支引用更改,以根据开发人员的需要完全自动化管道触发器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM