Spring Boot Heroku bardzo wolny deployment

0

Zastanawiam się co jeszcze mogę zrobić żeby zredukować czas deploymentu aplikacji Javowej na Heroku. Obecnie zajmuje to co ok. 40min, a czasami nawet dłużej. Bróbuje zarówno na .jar jak i .war archives i zarówno przez heroku cli jak i maven plugin. Nie ma znaczenia co wybiorę czas deploymentu pozostaje podobny. Aplikacja nie jest wcale tak ciężka, ok. 60MB dla .jar i 160MB dla .war (ponieważ maven plugin bierze wszystkie dodatkowe .jare zależności).

Oto mój plik pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>pl.jawegiel</groupId>
    <artifactId>myservlet2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jetty-version>9.4.10.v20180503</jetty-version>
        <java.version>1.8</java.version>
        <full-artifact-name>target/${project.artifactId}-${project.version}.jar</full-artifact-name>
    </properties>


    <dependencies>
        <!-- Servlet API -->
        <!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jdbc -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
            <version>10.0.0-M7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.12</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.14</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate.orm</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.0.0.Alpha5</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>5.4.2</version>
        </dependency>

    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>pl.jawegiel.Main</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.heroku.sdk</groupId>
                <artifactId>heroku-maven-plugin</artifactId>
                <version>3.0.4</version>
                <configuration>
                    <appName>jawegiel-web</appName>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Próbowałem użyć:

$ heroku plugins:install heroku-builds
$ heroku builds:cache:purge -a appname

ale nic nie dało.

Daje plusy za konkretne odpowiedzi!

0

Okazuje się, że to UPC zwalnia do 30kb/s przy większym uploadzie. Jakiś dramat.

0

Może kup jakiegoś VPSa na którym będziesz to budować? Kosz pewnie niewielki, a na VPSie robisz git clone... mvn deploy i cyk :)

4
  1. Wrzucasz na github.
  2. Dopisujesz github action https://github.com/marketplace/actions/deploy-to-heroku
    I juz.

Nie robiłem tego co prawda z heroku, tylko z GKE, ale idea ta sama. W tym momencie transfer to problem miedzy github, a heroku.

Github actions polecam ogólnie - stabilne, elastyczne, proste.

1 użytkowników online, w tym zalogowanych: 0, gości: 1