I JAR Java (grassi) dovrebbero essere pubblicati prima della containerizzazione?

0

Non sembra che ci sia molta letteratura sulle migliori pratiche quando si tratta di containerizzazione di applicazioni Java e sono curioso di sapere quali sono gli approcci logici. Prima era necessario configurare un qualche tipo di server, configurare il suo runtime (librerie, ecc.) E distribuire applicazioni Java pacchettizzate, sia che fossero WAR, JAR, EAR, ecc., Su di esso. Questo è qualcosa che è ancora applicabile nell'era della containerizzazione, ma al giorno d'oggi, con la crescente popolarità di strumenti come Spring Boot, la maggior parte delle app Java sono integrate in JAR di grassi all-in-one che contengono tutto il necessario per l'esecuzione (isolata) server solitamente leggeri).

Tuttavia, sono confuso su come l'assembly di containerizzazione viene solitamente eseguito. Gli archivi Java possono essere costruiti praticamente su qualsiasi macchina abbastanza capace. Il pacchetto risultante, ho capito, è ciò che costruiamo nella nostra immagine Docker per l'implementazione. Nella maggior parte dei casi, i team di sviluppo che adottano CI / CD dispongono di sistemi remoti che eseguono test e compilano automaticamente i JAR. In questo tipo di installazione, come appare il contenitore di distribuzione? Il sistema CI / CD deve essere configurato per pubblicare il JAR grasso in una sorta di repository remoto (ad esempio Artifactory), e quindi estrarre l'immagine Docker da lì per eseguire? O ci si aspetta che il sistema CI / CD raccolga il JAR risultante e pubblichi l'immagine del Docker nel registro?

    
posta Psycho Punch 28.12.2017 - 11:01
fonte

2 risposte

2

Se si desidera distribuire tramite immagini del contenitore, il processo di creazione dovrebbe creare direttamente le immagini. È quindi completamente irrilevante quale tipo di JAR e persino quale tipo di sistema di runtime si sta utilizzando. Poiché è necessario testare lo stesso artefatto che si desidera distribuire, tutti i test dovrebbero quindi utilizzare il contenitore e non il JAR non-containerizzato.

Detto questo, i JAR grassi offrono già molti dei benefici che puoi ottenere attraverso i contenitori. Se si dispone di un ambiente IT basato su JVM che non sia intrinsecamente migliore o peggiore di un'installazione containerizzata basata su Linux. I contenitori sono chiaramente migliori se è necessario utilizzare un tipo di orchestrazione (ad esempio Kubernetes) o se è necessario creare pacchetti di dipendenze non JVM (ad esempio servizi nativi). Restare con i JAR è chiaramente migliore se si eseguirà il software su sistemi non Linux, ad es. Windows o Solaris.

    
risposta data 28.12.2017 - 11:29
fonte
0

Poiché ogni applicazione Java ha requisiti univoci. L'utente dovrebbe essere in grado di specificare una variabile di ambiente che definisce parametri aggiuntivi per JVM (ad esempio la dimensione dell'heap JVM). Il piano di implementazione dovrebbe supportare tali funzionalità.

JVM non è ottimizzato per l'esecuzione all'interno di un contenitore, che è essenzialmente un Linux altamente vincolato. La migliore pipeline CI / CD viene sottoposta a test e, in caso di successo, carica un barattolo FAT nell'immagine della finestra mobile e inseriscilo in Git. Quindi questa immagine viene tirata dal tuo server.

    
risposta data 05.02.2018 - 13:03
fonte