# Eliminazione della duplicazione della versione nel pubblicazione dell'immagine di Distinta Attualmente nella pipeline di Distinta lo step di publish ha effettivamente esecuzione se il commit è riferito ad un tag. ```groovy GIT_BRANCH.startsWith('refs/tags') ``` Tipicamente usiamo marcare il tag con la versione (es 3.20.1) . Questo stesso valore è presente anche nel file pom.xml E' quest'ultimo valore che determina il nome dell'immagine docker ```groovy colorSh "docker push $imageData.name:$imageData.version" ``` Questa duplicazione può portare a errori, se i due valori non sono coincidenti, con l'effetto di sovrascrivere immagini già esistenti e di non creare l'immagine desiderata. Chiedo pertanto di valutare la possibilità stabilire la convenzione per cui la versione si definisce solo all'atto della creazione e publicazione del tag. Questo valore verrà utulizzato per aggiornare il file pom.xml direttamente processo della pipeline. ecco un ipotesi di modifica: aggiungere nello step 'Checkout' le righe 7-9 che leggono il valore della versione e utilizzano il comando mvn per aggiornare il file pom.xml ```groovy= stage('Checkout') { steps { gitCheckout() describeBuild() script { if (GIT_BRANCH.startsWith('refs/tags')) { tag = GIT_BRANCH.replace('refs/tags/', '') sh "mvn versions:set -DnewVersion=$tag" } imageData = settings.imageData() } } } ``` :::warning la riga 9 deve essere eseguita nel root folder del progetto. ::: Un'altra opzione potrebbe essere quella di far fallire al build in caso di disallineamento dei valori di version del pom e quello del tag ```groovy= stage('Publish') { steps { withDocker { script { if (GIT_BRANCH.startsWith('refs/tags')) { tag = GIT_BRANCH.replace('refs/tags/', '') if (tag == imageData.version) { sh "echo 'Il tag non corrisponde alla versione POM'" currentBuild.result = 'FAILURE' } colorSh "docker push $imageData.name:$imageData.version" } colorSh "docker image rm -f $imageData.name:$imageData.version" } } } } ```