![](/img/trans.png)
[英]AWS CodePipeline missing directories/files after being deployed to Elastic Beanstalk
[英]AWS CodePipeline successful, but not correctly deployed to Elastic Beanstalk
当我调用应用程序 URL 时,将我的 WAR 文件(成功)部署到 Elastic Beanstalk 给我一个 404 Not Found。 我可以在 /var/lib/tomcat8/webapps/ROOT/ 中看到 application.war 文件,而不是 META-INF 和 WEB-INF,当我手动部署时,它就在那里。
当我从 S3 中提取 WAR 文件并手动将其部署到 Elastic Beanstalk 时,它就像一个魅力。 注意:这与 CodeBuild 在我的管道中生成的 WAR 文件相同。 更好的是,如果我将文件安全复制 (scp) 到我的本地计算机并将其上传到 Elastic Beanstalk,它也能正常工作。
似乎在部署之前一切正常,一个有效的 WAR 文件甚至被部署到 Elastic Beanstalk。
通过eb-activity.log
我可以看到它识别出 WAR 文件并将其从临时目录部署到/var/lib/tomcat8/webapps/ROOT
,但它没有解压,容器/网络服务器也没有重新启动。
如何使用 CodePipeline 正确部署 WAR 文件?
近三年后,AWS Codepipeline 似乎还不是“WAR 文件部署友好”。 正如@Azeq在评论中指出的那样,标准的 Elastic Beanstalk 部署过程不会解压缩 war 文件,也不会真正部署任何内容。 CodePipeline 报告成功,因为文件的副本没有错误,但 Tomcat 不会解压缩 war 文件。
解决方案是以分解形式(已解压缩)提供您的工件。 为此,请修改构建后阶段和 CodeBuild buildspec.yml 的工件定义:
version: 0.2
phases:
install:
runtime-versions:
java: openjdk8
pre_build:
commands:
- echo CODEBUILD_RESOLVED_SOURCE_VERSION $CODEBUILD_RESOLVED_SOURCE_VERSION
build:
commands:
- mvn compile
post_build:
commands:
- mvn package
- mkdir artifact <-- create folder to extract war file content
- unzip target/my.war -d artifact/ <-- unzip to that folder
artifacts:
files:
- artifact/**/* <-- reference all those files as the artifact
name: artifact
cache:
paths:
- '/root/.m2/**/*'
注意构建后阶段的mkdir
和unzip
命令,以及artifacts
部分中的files
定义是如何编写的。 根据CodeBuild 文档, **/*
表示递归所有文件。
我试图复制您面临的问题。 我认为在创建“war”文件时,您将包含“META-INF”和“WEB-INF”文件夹的文件夹作为“war”输出文件的根目录。
相反,您应该将所有文件(在上面的文件夹中)放在“war”文件中,而不是根级文件夹。
我也为此挣扎了一段时间。 最后,我能够通过让 buildspec.yml 从 post_build 部分中构建的 war 文件中提取 WEB-INF 目录来解决它
由于 AWS 在您的工件周围放置了一个 zip 包装器,因此它会围绕 elasticbeanstalk 实际需要的内容添加另一个文件夹级别
version: 0.2
phases:
install:
runtime-versions:
java: corretto11
build:
commands:
- mvn compile
post_build:
commands:
- mvn package
- mkdir artifact
- unzip target/demo-0.0.1-SNAPSHOT.war -d artifact/
- mv artifact/WEB-INF WEB-INF
artifacts:
files:
- WEB-INF/**/*
name: artifact
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.