# 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"
}
}
}
}
```