---
# System prepended metadata

title: Eliminazione della duplicazione della versione nel pubblicazione dell'immagine di Distinta

---

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