AWS CodePipeline ElasticBeanstalk 部署失败

Posted

技术标签:

【中文标题】AWS CodePipeline ElasticBeanstalk 部署失败【英文标题】:AWS CodePipeline ElasticBeanstalk deploy failure 【发布时间】:2016-09-05 19:22:32 【问题描述】:

我最近创建了一个 AWS CodePipeline 管道,用于从 Github 中提取、使用 Jenkins/Maven 构建并部署到现有的 ElasticBeanstalk 项目。构建步骤的输出和部署步骤的输入是构建的 .war 文件。成功构建 WAR 后,部署失败,并从 AWS EB 控制台显示此错误。

[实例:i-6605c4e1] 实例上的命令失败。返回代码:2 输出:(截断)...opt/elasticbeanstalk/deploy/appsource/source_bundle + /usr/bin/unzip -o -d /tmp/deployment/application/ROOT /opt/elasticbeanstalk/deploy/appsource/source_bundle存档:/opt/elasticbeanstalk/deploy/appsource/source_bundle mapname:转换失败。挂钩 /opt/elasticbeanstalk/hooks/appdeploy/pre/02unzip.sh 失败。有关更多详细信息,请使用控制台或 EB CLI 检查 /var/log/eb-activity.log。

我可以在此处提取更详细的消息,但也许有人可以看到我看不到的明显我遗漏的东西。

我可以成功地将 Jenkins/Maven 生成的 WAR 文件直接部署到 Elastic Beanstalk,但通过 CodePipeline 部署失败。

谢谢!

【问题讨论】:

CodePipeline Jenkins 插件将在将 Jenkins 作业“输出位置”上传到 S3 之前对其进行压缩。难道是WAR文件被压缩了两次?您的 Jenkins“输出位置”是否指向压缩的 WAR 文件?您可以尝试将其更改为生成 WAR 文件的未压缩路径。 谢谢@tapichu!成功了。 【参考方案1】:

只是为了回答这个问题并将其标记为已解决,我重申@tapichu 提供的答案。

CodePipeline Jenkins 插件会在将 Jenkins 作业“输出位置”上传到 S3 之前对其进行压缩。

在 Jenkins 项目的配置页面中,有一个选项可以设置构建后操作。我选择了“AWS CodePipeline Publisher”操作,并最初将“输出位置”设置为构建项目的 WAR 文件。这是不正确。而是设置输出位置...

...到生成 WAR 文件的未压缩路径。

再次感谢@tapichu!

【讨论】:

从 0.15 版开始,该插件将按原样上传常规文件,而无需再次压缩它们。因此,您可以返回并更新输出位置以指向您要上传的 WAR 文件。

以上是关于AWS CodePipeline ElasticBeanstalk 部署失败的主要内容,如果未能解决你的问题,请参考以下文章

AWS CodePipeline - 使用现有 Dockerrun.aws.json 部署到 Elastic Beanstalk

如何停止 aws codepipeline 部署阶段

[AWS DA] AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy

使用 AWS CDK 在 AWS Codepipeline 中部署 Python Lambda 函数

为啥 AWS CodePipeline 抱怨“Dockerfile”和“Dockerrun.aws.json”?

AWS CodePipeline:同时运行多个管道