Amazon web services AWS代码管道成功,但未正确部署到Elastic Beanstalk
将WAR文件(成功)部署到Elastic Beanstalk后,我在调用应用程序URL时找到了一个404。我可以在/var/lib/tomcat8/webapps/ROOT/中看到application.war文件,而不是META-INF和WEB-INF文件,当我手动部署时,它们就在那里 当我从S3中提取WAR文件并手动将其部署到Elastic Beanstalk时,它就像一个符咒。注意:这与我的管道中的CodeBuild生成的WAR文件相同。更好的是,如果我将文件安全复制(scp)到本地计算机并将其上载到Elastic Beanstalk,它也可以工作 似乎在部署之前一切都正常,一个工作的WAR文件甚至被部署到Elastic Beanstalk 通过查看Amazon web services AWS代码管道成功,但未正确部署到Elastic Beanstalk,amazon-web-services,amazon-elastic-beanstalk,aws-codepipeline,aws-codebuild,Amazon Web Services,Amazon Elastic Beanstalk,Aws Codepipeline,Aws Codebuild,将WAR文件(成功)部署到Elastic Beanstalk后,我在调用应用程序URL时找到了一个404。我可以在/var/lib/tomcat8/webapps/ROOT/中看到application.war文件,而不是META-INF和WEB-INF文件,当我手动部署时,它们就在那里 当我从S3中提取WAR文件并手动将其部署到Elastic Beanstalk时,它就像一个符咒。注意:这与我的管道中的CodeBuild生成的WAR文件相同。更好的是,如果我将文件安全复制(scp)到本地计算机
eb activity.log
,我可以看到它识别WAR文件,并将其从临时目录部署到/var/lib/tomcat8/webapps/ROOT
,但它没有解压缩,容器/webserver也没有重新启动
如何使用CodePipeline正确部署WAR文件?我试图复制您面临的问题。我认为在创建“war”文件时,您将包含“META-INF”和“WEB-INF”文件夹的文件夹作为“war”输出文件的根
相反,您应该将所有文件(在上面的文件夹中)放在“war”文件中,而不放在根级文件夹中。近三年后,AWS代码管道似乎还不是“war文件部署友好型”的。正如标准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/**/*'
版本:0.2
阶段:
安装:
运行时版本:
java:openjdk8
预构建:
命令:
-echo代码生成\解析\源\版本$code生成\解析\源\版本
建造:
命令:
-mvn编译
后期构建:
命令:
-mvn包
-mkdir工件我也为此挣扎了一段时间。最后,我能够通过让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
我以为战争档案有问题。然而,当我从S3(由CodeBuild生成)下载WAR文件并手动将其部署到Elastic Beanstalk时,它就工作了。我也有同样的问题,并在AWS论坛上询问为什么WAR没有被“解压缩”就放在根文件夹中: