如何在单个CICD(CodePipeline)中部署前端和后端?

0

【以下的问题经过翻译处理】 我已经为我的应用程序的前端设置了一个使用 Codepipeline、Code Build 的 CICD,并将其部署到 ECS Fargate 容器中。同样地,我还为我的应用程序的后端设置了一个使用 Codepipeline、Code Build 的 CICD,并将其部署到 ECS Fargate 容器中。

问题在于,我的应用程序的前端和后端都位于两个不同的 Bitbucket 存储库中。是否有任何良好的实践方法来在一个 CICD 中管理这个问题?基本上,我想将我的应用程序的前端和后端部署到一个 ECS Fargate 群集中。目前,正在使用两个 ECS Fargate 群集。我只想将我的应用程序部署为一个解决方案,最终包含两个容器,但在单个群集中。

如果有人想获取更多细节,我正在遵循此教程。

有没有任何最佳实践我应该遵循我的解决方案?对于改进的任何建议将非常感激。

profile picture
专家
已提问 5 个月前23 查看次数
1 回答
0

【以下的回答经过翻译处理】 我了解到以下事项:

  • 目前前端和后端应用有两个不同的流水线。
  • 前端和后端应用位于不同的BitBucket存储库中。
  • 需要在一个CICD流水线中管理前端和后端的最佳实践。
  • 必须将前端和后端部署到一个ECS集群中,目前正在部署到2个集群。

请确认问题的总结和理解是否正确。

最佳实践

根据AWS上的CICD最佳实践,建议:

“为每个分支和团队使用多个不同的流水线”

在这种情况下,最佳实践是为每个存储库使用不同的流水线。

尽管如此,仍然有可能将每个容器运行在自己的服务中,但部署到一个集群中。请参见第2步:创建您的持续部署流水线中的第6步,添加部署阶段,指定现有的ECS集群和服务。前端和后端流水线之间的区别在于它们指定相同的ECS集群但不同的服务。

程序相关的第三方教程使用了云形成(CFN)提供者在部署阶段中创建了一个Fargate ECS集群,其中包含一个VPC、2个子网以及负载平衡器。该解决方案创建了基底层基础设施,因此,当在2个不同的管道上使用时,会创建2个集群。一个建议是单独部署CFN模板,这样基础设施只创建一次,并将ECS集群作为现有集群包含在管道中。 请注意,在定制解决方案方面的援助超出了通常提供的支持水平。因此,我没有亲自实施此自定义解决方案,并在尽最大努力的基础上提供了有关此方面的指导。 更新自定义解决方案 也就是说,如果您仍然希望实现1个管道来将前端和后端容器部署到单个集群,这是可能的。但是,请注意,实现这样的解决方案意味着,如果从1个存储库部署了更改,则将对两个存储库执行管道部署。 更新源阶段 可以将管道配置为从多个源中提取。如果配置了多个源输入工件,例如前端和后端BitBucket存储库,请确保也配置了多源输出工件。 更新构建阶段 更新构建阶段输入工件以包括多个源输出工件。根据自定义解决方案,在构建中操作源输出工件,并包含一个文件imageDetail.json作为构建输出工件。必须更新构建以包括前端应用程序和后端应用程序的输出工件。 更新部署阶段 更新部署阶段输入工件以包括多个构建输出工件。此外,更新ParameterOverrides以包含前端和后端应用程序的图像URI。 更新Fargate-Cluster.yml 更新Fargate-Cluster.yml以包含前端和后端应用程序的TaskDefinition(2个任务在一个集群中运行)或更新TaskDefinition的ContainerDefinitions以包括前端和后端应用程序的容器(1个任务在包含2个容器的集群中运行。 更新自定义解决方案所需的步骤摘要如下: *注意:如果从1个存储库部署了更改,则将对这两个存储库执行管道部署。 *更新源阶段以包括多个源输入和输出工件(用于前端和后端)。 *更新生成阶段: *包括多个输入工件。 *更新构建本身以创建并包含多个输出工件。 *更新部署阶段: *包括多个输入工件。 *更新ParameterOverrides以包含前端和后端应用程序的映像uri。 *将任务定义更新为: 包括每个应用程序的任务定义。
或更新TaskDefinition以包含每个应用程序的容器。

请注意,由于对自定义解决方案的帮助超出了通常提供的支持级别,我已在尽最大努力的基础上提供了对定制解决方案所需更改的高级别概述。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则