AWS:帮助在 Codepipeline 中设置 CodeDeploy

Posted

技术标签:

【中文标题】AWS:帮助在 Codepipeline 中设置 CodeDeploy【英文标题】:AWS: Help setting up CodeDeploy in a Codepipeline 【发布时间】:2020-04-30 04:19:39 【问题描述】:

看起来不可能让 Codedeploy 在具有 CodeBuild 的 CodePipeline 项目中工作。

首先,我设置了一个具有 3 个阶段的管道:源、构建和部署,前 2 个阶段运行良好,但第 3 个阶段(CodeDeploy)抛出此错误:

CodeBuild 将输出工件以 .zip 文件的形式推送到 s3,CodeDeploy 不支持这种方式。

为此,我尝试在 CodeBuild 和 CodeDeploy 之间设置一个 Lambda 函数,如下所示:(Source -> CodeBuild -> Invoke Lambda -> CodeDeploy),Lambda 函数将 appspec.yml 文件上传到 s3 并调用 putJobSuccessResult,但我仍然遇到同样的错误。

【问题讨论】:

【参考方案1】:

BundleType 必须是 YAML 或 JSON

目前尚不支持使用 CodePipeline 部署 Lambda,并将 CodeDeploy 作为部署提供程序。

这是因为 CodePipeline 将始终压缩包/工件,而 CodeDeploy 需要一个 YAML/JSON 文件作为 Lambda 函数部署的源(appspec.yaml 文件)。

为了解决此限制,您有两种选择:

    在您的 CodeBuild Stage 内运行 AWS CLI 命令以更新/部署您的 lambda 函数

    使用 CodeBuild 打包您的 lambda 函数代码并将工件推送到 CloudFormation 阶段,该阶段将更新或创建您的 Lambda 函数资源。您应该会发现 [1] 中的参考文档对于获取有关打包 SAM 应用程序的必要信息很有用。

参考:

[1] SAM 包装 - https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-deploying.html#serverless-sam-cli-using-package-and-deploy

【讨论】:

我使用 AWS Lambda 作为 CodeBuild 和 CodeDeploy 之间的阶段,lambda 不会压缩输出工件,只将一个文件上传到 .yaml 的 s3,我仍然得到同样的错误. 我注意到您的 appspec 文件名为“appspec.yml”,而 CodeDeploy Lambda 部署需要“appspec.yaml”-docs.aws.amazon.com/codedeploy/latest/userguide/… 我尝试了所有这些名称“appspec.yml”、“appSpec.yml”、“appspec.yaml”和“appSpec.yaml”,但它们都不起作用,我看起来不支持在管道中一起使用 codebuild 和 codedeploy。 对不起,这与文件名无关,这是我原始答案中提到的 zip 问题。 “目前尚不支持使用 CodePipeline 和 CodeDeploy 作为部署提供程序部署 Lambda 的已知限制。” 好吧,6 个月后,仍然没有解决方案......这个答案中的第一个选项值得一试。

以上是关于AWS:帮助在 Codepipeline 中设置 CodeDeploy的主要内容,如果未能解决你的问题,请参考以下文章

AWS CodePipeline 无法访问组织的存储库

AWS CodePipeline github webhook 未在提交时触发

在 AWS 中设置私有 docker 注册表并将其与 Beanstalk 一起使用

如何使用 S3 在 aws 中设置静态站点 - 是不是有视觉指南?

如何在 spark-shell 中设置 aws 访问密钥和 aws 密钥

在 AWS 中设置 Datapipeline 流