Apache Tomcat kullanıyorsanız aynı uygulamanın birden fazla sürümünü aynı anda aynı path üzerinde çalıştırabilirsiniz. Bu deploy yaparken kesintisiz hizmet sağlamak için çok yardımcı oluyor. Buna Parallel Deployment deniyor. Paralel deploy sırasında eğer uygulamanın bir önceki versiyonunda oturum açılmışsa istekler oraya gitmeye devam ediyor, yeni oturumlar yeni sürüme gitmeye başlıyor.

Paralel deploy yapabilmek için oluşturulan war dosyasının bir versiyona sahip olması gerekmekte. Bunu yapabilmek için dosya ismini paket-ismi##VERSION.war şeklinde yapmak gerekiyor. Eğer Maven kullanıyorsanız pom.xml dosyasında aşağıdaki gibi basitçe yapabilirsiniz.

<build>
    <finalName>${project.artifactId}##{$project.version}</finalName>
</build>

Eğer version numarasından ziyada derleme zamanını kullanmak isterseniz aşağıdaki gibi yapabilirsiniz.

<build>
    <finalName>${project.artifactId}##${maven.build.timestamp}</finalName>
</build>

Böyle bir durumda paket-ismi##2020-09-12T12:17:40Z.war gibi bir dosya ismi oluşacaktır, bu bana çirkin görünüyor. Daha düzgün bir tarih formatı için aşağıdaki gibi bir kullanım iş görecektir.

<properties>
    <maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format>
    <buildNumber>${maven.build.timestamp}</buildNumber>
</properties>

<build>
    <finalName>${project.artifactId}##${buildNumber}</finalName>
</build>

Fakat bu kullanımda TIMEZONE muhtemelen UTC olacaktır. Bunun önüne geçmek için aşağıdaki gibi bir kullanım işinizi çözecektir.

<build>
    <finalName>${project.artifactId}##${build.time}</finalName>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.10</version>
            <executions>
                <execution>
                    <id>timestamp-property</id>
                    <goals>
                        <goal>timestamp-property</goal>
                    </goals>
                    <configuration>
                        <name>build.time</name>
                        <pattern>yyyyMMddHHmmss</pattern>
                        <timeZone>Asia/Istanbul</timeZone>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Artık deploy yaparken bir önceki war dosyasını silmeden yeni dosyanızı atabilirsiniz. Eğer yapılan deployu geri almak isterseniz attığınız son dosyayı silmek yeterli olacaktır.

Kaynaklar: