Spring Boot和ebextensions

时间:2017-03-09 18:34:04

标签: maven amazon-web-services spring-boot amazon-elb amazon-elastic-beanstalk

我试图将.ebextensions文件夹添加到我的jar的根级别,以部署到AWS弹性beanstalk。

我的文件夹结构是:

main:
--src
--resources
  --.ebextensions

当我构建jar时,我的.ebextensions被放置在我的目标的类路径上,因此在部署时不会被Elastic Beanstalk接收。

的pom.xml

<plugin>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-maven-plugin</artifactId>
     <configuration>
           <fork>true</fork>
           <addResources>false</addResources>
     </configuration>
</plugin>

我如何构建以便ELB获取ebextensions?

5 个答案:

答案 0 :(得分:10)

这对我有用,是我发现解决这个问题的最干净的方式(

在项目的根目录中添加.ebextensions,并在插件部分的末尾添加此代码段:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>prepare</id>
                    <phase>package</phase>
                    <configuration>
                        <tasks>
                            <unzip src="${project.build.directory}/${project.build.finalName}.jar" dest="${project.build.directory}/${project.build.finalName}" />
                            <copy todir="${project.build.directory}/${project.build.finalName}/" overwrite="false">
                                <fileset dir="./" includes=".ebextensions/**"/>
                            </copy>
                            <zip compress="false" destfile="${project.build.directory}/${project.build.finalName}.jar" basedir="${project.build.directory}/${project.build.finalName}"/>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

这个插件使用ant来解压弹簧引导生成的最终jar,使用相同的名称再次复制root和zip(jar)中的.ebextensions。经过测试并在生产中工作:)

适用于Spring 1.5.3.RELEASE

答案 1 :(得分:1)

我遇到了同样的问题,在Andy建议为我工作的时候将.ebextensions移到了jar旁边,直接将.conf文件添加到所需的目录中,如下所示:

https://stackoverflow.com/a/41011160/7686379

答案 2 :(得分:1)

对于那些使用Gradle的用户来说,这是需要将它们添加到build.gradle以便将.ebextensions东西添加到jar的根中的原因。

假定.ebextensions目录和内容位于项目的根目录中。

普通Java应用程序:

jar {
    from(".") {
        include ".ebextensions/**"
    }
}

Spring Boot应用程序:

bootJar {
    from(".") {
        include ".ebextensions/**"
    }
}

Spring Boot的情况与普通Java情况略有不同,因为使用Spring Boot的是实际构造jar的Spring Boot Gradle插件-它使用特殊的“ bootJar”任务代替了标准Java插件“ jar” ”任务。

我认为对于Maven构建,Javier的答案是最干净的方法。对我来说,这说明了在修改“标准”构建时Gradle over Maven的灵活性。

答案 3 :(得分:0)

对于所有可能为此感到困扰的人。在项目的根目录中有一个如下所示的目录:.ebextentions / nginx / conf.d / proxy.conf在proxy.conf文件中,您放置此client_max_body_size 50M;正是这样。现在,当您将项目上传到Elastic beantalk时,要做的是创建一个压缩文件夹,然后将目标文件夹和.ebextensions目录复制到其中,这称为源包。现在,您可以将压缩文件夹(捆绑包)上传到弹性beantalk。

答案 4 :(得分:0)

这是我的做法:
app-0.0.1-SNAPSHOT.jar生成.ebextensions/nginx/conf.d/proxy.conf
之后,我在具有client_max_body_size 25M;的根项目路径上创建了cp target/app-0.0.1-SNAPSHOT.jar . && zip -r app-new.zip .ebextensions/ app-0.0.1-SNAPSHOT.jar -在我的情况下是增加最大上传大小。
对跑步者使用Github Actions和ubuntu-latest-zip命令是开箱即用的,我使用此命令来完成

app-new.zip

基本上p[0]-p[1]是我要上传到ElasticBeanstalk的文件