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 github webhook 未在提交时触发
在 AWS 中设置私有 docker 注册表并将其与 Beanstalk 一起使用
如何使用 S3 在 aws 中设置静态站点 - 是不是有视觉指南?