Skip to main content

How to

Guida al rilascio dei servizi RPA

1. Obiettivo della guida

Questa guida descrive il processo standard per preparare, rilasciare e aggiornare i servizi RPA sviluppati dagli Automator all’interno del gruppo di lavoro.

L’obiettivo è garantire che ogni servizio venga rilasciato in modo ordinato, tracciabile, ripetibile e con il minor numero possibile di imprevisti, rispettando le best practice Python, Docker, GitLab e DevOps adottate dal gruppo RPA.

Per “rilascio di un servizio” si intende l’installazione e l’esecuzione del servizio su una macchina remota, utilizzando Docker Compose, immagini pubblicate sul registry GitLab del repository e file di configurazione specifici per ambiente.


2. Attori coinvolti

2.1 Sviluppatore / TL RPA

È il responsabile dello sviluppo del servizio e della preparazione tecnica del rilascio.

Si occupa di:

  • sviluppare il codice;

  • rispettare le best practice Python e Docker del gruppo RPA;

  • predisporre i file Docker Compose per i vari ambienti;

  • testare il servizio localmente;

  • buildare e pubblicare le immagini Docker, tramite CI o manualmente;

  • preparare il file .env per l’ambiente target;

  • salvare le configurazioni sensibili su Bitwarden;

  • aprire il ticket verso DevOps;

  • aggiornare il file di tracciamento Move to Prod a rilascio completato.

2.2 Team DevOps

È il team responsabile dell’installazione o aggiornamento del servizio sulle macchine remote.

Si occupa di:

  • ricevere il ticket di delivery o aggiornamento microservizio;

  • recuperare Docker Compose, file .env e allegati necessari;

  • installare o aggiornare il servizio sulla VM indicata;

  • configurare eventuali DNS richiesti;

  • verificare che il servizio sia avviato correttamente;

  • comunicare il completamento della lavorazione.

2.3 Gruppo RPA

È il gruppo proprietario del processo, delle best practice e della governance dei servizi RPA.

Si occupa di:

  • definire gli standard tecnici;

  • mantenere le convenzioni comuni;

  • garantire la tracciabilità dei rilasci;

  • condividere informazioni operative, come VM disponibili, ambienti e DNS.


3. Strumenti utilizzati

3.1 GitLab

GitLab è utilizzato per:

  • versionare il codice sorgente;

  • gestire il repository del servizio;

  • eseguire eventuali pipeline CI/CD;

  • pubblicare immagini Docker nel registry del repository;

  • mantenere tracciabilità di commit, versioni e tag.

3.2 Docker e Docker Compose

Docker è utilizzato per containerizzare il servizio RPA.

Docker Compose è utilizzato per definire l’esecuzione del servizio nei diversi ambienti:

  • locale;

  • sviluppo;

  • collaudo;

  • produzione.

3.3 GitLab Container Registry

Il registry GitLab del repository contiene le immagini Docker del servizio.

Negli ambienti remoti non viene rilasciato l’intero repository, ma vengono utilizzati:

  • il file Docker Compose dell’ambiente;

  • il file .env dell’ambiente;

  • l’immagine Docker già pubblicata sul registry;

  • eventuali file esterni non inclusi nell’immagine.

3.4 Bitwarden

Bitwarden è utilizzato per salvare e condividere in modo sicuro i file .env degli ambienti.

I file .env devono essere salvati nella raccolta RPA seguendo la naming convention:

env_<ambiente>_<nome_automazione>

Esempi:

env_dev_nome-automazione
env_coll_nome-automazione
env_prod_nome-automazione

3.5 Sistema di ticketing DevOps

Il sistema di ticketing DevOps è utilizzato per richiedere:

  • delivery di nuovi microservizi;

  • aggiornamento di microservizi esistenti;

  • modifica di file .env;

  • modifica di Docker Compose;

  • caricamento di file locali;

  • configurazione di DNS;

  • interventi sulle VM remote.

3.6 File Move to Prod

Il file Move to Prod è il file condiviso usato per tracciare le informazioni operative dei rilasci.

Contiene, tra le altre cose:

  • disponibilità delle VM;

  • ambiente di riferimento;

  • servizio rilasciato;

  • VM utilizzata;

  • DNS utilizzato;

  • eventuali note operative.

Il file è condiviso nel canale Teams del gruppo Python.


4. Struttura attesa del repository

Prima di qualunque rilascio, il repository deve rispettare le best practice Python e Docker del gruppo RPA.

4.1 Struttura del codice

Il codice applicativo deve essere contenuto all’interno della cartella:

src/

Esempio:

repository/
├── src/
│   └── ...
├── docker-compose.local.yml
├── docker-compose.dev.yml
├── docker-compose.coll.yml
├── docker-compose.prod.yml
├── .env.example
├── Dockerfile
├── pyproject.toml
└── README.md

4.2 Docker Compose richiesti

Devono essere presenti i Docker Compose relativi agli ambienti previsti:

docker-compose.local.yml
docker-compose.dev.yml
docker-compose.coll.yml
docker-compose.prod.yml

La naming convention può essere adattata agli standard effettivi del gruppo, ma deve essere coerente e facilmente riconoscibile.

4.3 Environment file

Deve essere presente almeno un file di esempio, ad esempio:

.env.example

Il file .env.example deve contenere tutte le variabili necessarie al servizio, senza valori sensibili reali.

Esempio:

APP_ENV=local
LOG_LEVEL=INFO
DB_HOST=
DB_PORT=
DB_NAME=
DB_USER=
DB_PASSWORD=
SECRET_KEY=

4.4 Mount dei volumi

I mount dei vari Docker Compose devono partire dalla cartella corrente del repository.

Esempio corretto:

volumes:
  - ./data:/app/data
  - ./logs:/app/logs

Esempio da evitare:

volumes:
  - /home/user/project/data:/app/data

I path assoluti locali non devono essere usati nei Compose destinati al rilascio, perché non sono portabili tra ambienti e macchine diverse.

4.5 Immagini Docker

Nei Compose degli ambienti remoti non deve essere necessario buildare il codice dal repository completo.

L’ambiente remoto deve usare immagini già pubblicate sul registry GitLab.

Esempio:

services:
  automazione:
    image: registry.gitlab.com/gruppo/progetto/nome-servizio:dev-latest
    env_file:
      - .env

Oppure, in base alla strategia di versionamento:

services:
  automazione:
    image: registry.gitlab.com/gruppo/progetto/nome-servizio:v1.2.3

4.6 Label per Continuous Delivery

Se il servizio deve essere aggiornabile automaticamente tramite CD, il Compose deve includere le label previste dallo standard del gruppo.

Le label devono permettere al sistema di riconoscere:

  • servizio;

  • ambiente;

  • immagine da monitorare;

  • strategia di aggiornamento.

Esempio indicativo:

labels:
  - "rpa.cd.enabled=true"
  - "rpa.cd.environment=dev"
  - "rpa.cd.service=nome-automazione"

Le label effettive devono seguire lo standard definito dal gruppo RPA/DevOps.


5. Differenza tra esecuzione locale e ambiente remoto

5.1 Esecuzione locale

In locale è presente l’intero repository.

Lo sviluppatore può quindi:

  • eseguire il codice direttamente sulla macchina;

  • modificare il codice;

  • buildare l’immagine;

  • eseguire il servizio tramite Compose local;

  • montare cartelle locali;

  • fare debug completo.

In locale il servizio può essere testato in tre modalità:

  1. esecuzione a crudo sulla macchina;

  2. esecuzione Dockerizzata con Compose local;

  3. esecuzione Dockerizzata con Compose di ambiente, ad esempio dev.

5.2 Esecuzione su ambiente remoto

Nell’ambiente remoto non viene copiato l’intero repository.

Il servizio viene eseguito usando:

  • Docker Compose dell’ambiente;

  • file .env dell’ambiente;

  • immagine Docker pubblicata sul GitLab Container Registry;

  • eventuali file esterni non inclusi nell’immagine.

Questo significa che il servizio remoto deve essere autosufficiente a partire da immagine, Compose e configurazione.


6. Ambienti di rilascio

Idealmente i rilasci seguono tre ambienti:

  1. sviluppo;

  2. collaudo;

  3. produzione.

6.1 Sviluppo

Ambiente usato per verificare il comportamento del servizio in un contesto remoto non produttivo.

Serve per validare:

  • immagine Docker;

  • Docker Compose;

  • configurazione .env;

  • connessioni verso sistemi esterni;

  • comportamento generale del servizio.

6.2 Collaudo

Ambiente usato per test più vicini alla produzione.

Serve per validare:

  • stabilità;

  • dati e configurazioni più rappresentativi;

  • integrazioni;

  • test utente o test funzionali finali.

6.3 Produzione

Ambiente finale in cui il servizio viene eseguito per l’utilizzo operativo.

Richiede maggiore attenzione su:

  • credenziali;

  • DNS;

  • configurazioni definitive;

  • disponibilità della VM;

  • tracciabilità;

  • impatto sugli utenti;

  • rollback.

6.4 Salto degli ambienti

In base a urgenza, criticità o caratteristiche dello sviluppo, alcuni step possono essere saltati.

Esempi:

  • rilascio diretto in collaudo;

  • rilascio diretto in produzione;

  • aggiornamento rapido di una fix urgente.

Il salto di uno o più ambienti deve essere consapevole e motivato, perché riduce il livello di verifica progressiva.


7. Fase preliminare: validazione locale

Prima di aprire un ticket di rilascio, lo sviluppatore deve verificare che il servizio funzioni correttamente in locale.

7.1 Test del servizio a crudo

Il primo test consiste nell’eseguire il servizio direttamente sulla macchina locale.

Obiettivo:

  • verificare che il codice Python funzioni;

  • verificare dipendenze;

  • verificare configurazioni base;

  • intercettare errori applicativi prima della containerizzazione.

Esempio:

python -m src.main

Oppure, in base alla struttura del progetto:

python src/main.py

7.2 Test con Compose local

Il secondo test consiste nell’eseguire il servizio tramite Compose local.

Esempio:

docker compose -f docker-compose.local.yml up --build

Obiettivo:

  • verificare Dockerfile;

  • verificare build dell’immagine;

  • verificare mount locali;

  • verificare gestione env;

  • verificare porte e volumi;

  • verificare comportamento containerizzato.

7.3 Test con Compose di ambiente

Dopo il Compose local, è consigliato testare almeno il Compose dev.

Esempio:

docker compose -f docker-compose.dev.yml --env-file .env.dev up

Obiettivo:

  • verificare che l’immagine sia compatibile con il Compose remoto;

  • verificare che il servizio non dipenda da file presenti solo nel repository locale;

  • verificare che le variabili siano sufficienti;

  • simulare il più possibile il comportamento della macchina remota.


8. Checklist pre-rilascio

Prima di richiedere il rilascio, verificare che:

  • il codice sia contenuto nella cartella src/;

  • siano presenti i Compose local, dev, collaudo e prod;

  • i mount dei Compose partano dalla cartella corrente;

  • non siano presenti path assoluti locali;

  • il Dockerfile sia aggiornato;

  • l’immagine sia buildabile;

  • il servizio sia stato testato a crudo;

  • il servizio sia stato testato con Compose local;

  • il servizio sia stato testato almeno con Compose dev;

  • il file .env dell’ambiente sia stato preparato;

  • il file .env non sia committato nel repository;

  • il file .env sia stato salvato in Bitwarden;

  • l’immagine sia stata pubblicata sul registry GitLab;

  • il Compose punti all’immagine corretta;

  • siano presenti eventuali label CD richieste;

  • siano stati identificati eventuali file esterni da allegare;

  • sia stata individuata la VM di destinazione dal file Move to Prod;

  • siano stati individuati eventuali DNS necessari.


9. Build e pubblicazione dell’immagine Docker

L’immagine Docker può essere pubblicata in due modalità:

  1. tramite CI GitLab;

  2. manualmente dall’ambiente locale dello sviluppatore.

9.1 Build tramite CI

La modalità preferibile è la build automatica tramite pipeline CI.

La pipeline può essere triggerata da:

  • push su branch;

  • merge;

  • tag di versione;

  • commit specifico;

  • workflow manuale.

L’immagine dovrebbe essere taggata in modo chiaro.

Esempi:

dev-latest
coll-latest
prod-latest
v1.2.3
commit-<sha>

Una strategia consigliata è avere sia tag ambientali sia tag immutabili.

Esempio:

dev-latest
v1.2.3
commit-a1b2c3d

In questo modo:

  • dev-latest permette aggiornamenti rapidi;

  • v1.2.3 permette tracciabilità;

  • commit-<sha> permette audit tecnico.

9.2 Build manuale

In alternativa, l’immagine può essere buildata localmente e pushata manualmente.

Esempio indicativo:

docker build -t registry.gitlab.com/gruppo/progetto/nome-servizio:dev-latest .
docker push registry.gitlab.com/gruppo/progetto/nome-servizio:dev-latest

La build manuale deve essere usata con attenzione, perché è meno tracciabile rispetto a una pipeline CI.


10. Preparazione del file .env

Il file .env dell’ambiente deve essere derivato dal file locale o dal file .env.example.

Ogni ambiente deve avere variabili specifiche e indipendenti.

10.1 Variabili da rendere specifiche per ambiente

Devono essere diverse per ogni ambiente, quando applicabile:

  • password utenti;

  • password database;

  • secret key;

  • token API;

  • connection string;

  • credenziali di servizio;

  • endpoint;

  • nomi database;

  • bucket;

  • utenti applicativi;

  • chiavi di cifratura;

  • configurazioni di integrazione.

Esempio:

APP_ENV=dev
LOG_LEVEL=INFO

DB_HOST=db-dev.internal
DB_PORT=5432
DB_NAME=automazione_dev
DB_USER=automazione_dev_user
DB_PASSWORD=<password-dev>

SECRET_KEY=<secret-dev>

10.2 Salvataggio su Bitwarden

Al termine della preparazione, il file .env deve essere salvato in Bitwarden nella raccolta RPA.

Naming convention:

env_<ambiente>_<nome_automazione>

Esempi:

env_dev_recupero-pratiche
env_coll_recupero-pratiche
env_prod_recupero-pratiche

Questo permette a chiunque sia autorizzato di:

  • recuperare l’environment;

  • eseguire debug locali;

  • verificare configurazioni;

  • recuperare credenziali di connessione;

  • aggiornare il servizio in modo controllato.

10.3 Creazione del Bitwarden Send

Dopo aver salvato il file .env, è necessario creare un Bitwarden Send.

Il Send può contenere:

  • il contenuto testuale del file .env;

  • oppure direttamente il file .env.


11. Apertura del ticket di delivery microservizio

Per richiedere un nuovo rilascio, aprire un ticket nel sistema DevOps.

11.1 Tipologia ticket

La tipologia da selezionare è:

Delivery microservizio

Il ticket deve essere contestualizzato nell’ambiente RPA.

11.2 Ambiente remoto

Nel ticket deve essere specificato l’ambiente di rilascio:

  • sviluppo;

  • collaudo;

  • produzione.

Deve inoltre essere indicata la destinazione:

  • cloud;

  • quartier generale;

  • VM dedicata.

La VM deve essere scelta in base alla disponibilità riportata nel file Move to Prod, condiviso nel canale Teams del gruppo Python.

11.3 Informazioni da inserire nel ticket

Il ticket deve contenere almeno:

  • nome del servizio;

  • repository GitLab;

  • ambiente target;

  • VM target;

  • Docker Compose da utilizzare;

  • immagine Docker da utilizzare;

  • tag immagine;

  • link Bitwarden Send del file .env;

  • eventuali DNS richiesti;

  • eventuali file allegati da rilasciare;

  • eventuali cartelle di destinazione dei file;

  • eventuali note operative;

  • eventuali dipendenze o prerequisiti.

11.4 File da allegare o linkare

Al ticket devono essere allegati o referenziati:

  • Docker Compose relativo all’ambiente;

  • Bitwarden Send del file .env;

  • eventuali Excel di supporto;

  • eventuali shape file;

  • eventuali file dati;

  • eventuali template;

  • eventuali configurazioni non incluse nell’immagine.

I file che non risiedono nell’immagine Docker devono essere esplicitamente indicati, insieme al path in cui DevOps dovrà posizionarli.

Esempio:

Allegare il file input_template.xlsx nella cartella ./data/templates/
Allegare gli shapefile nella cartella ./data/shapes/

12. DNS e pubblicazione esterna

Se il servizio richiede pubblicazione esterna, nel ticket devono essere indicati i DNS necessari.

Come best practice, i DNS devono risiedere sotto i domini standard del gruppo.

Per sviluppo e collaudo:

.rpa.collaudo-live.xyz

Per produzione:

.rpa.eagleprojects.cloud

Esempi indicativi:

nome-servizio.rpa.collaudo-live.xyz
nome-servizio.rpa.eagleprojects.cloud

La naming convention effettiva deve essere coerente con gli standard del gruppo e approvata da DevOps.


13. Completamento del rilascio

Una volta che DevOps ha completato la lavorazione del ticket, lo sviluppatore deve verificare il servizio.

13.1 Verifiche post-rilascio

Verificare che:

  • il container sia avviato;

  • il servizio risponda correttamente;

  • i log non presentino errori critici;

  • le variabili ambiente siano corrette;

  • eventuali file allegati siano presenti;

  • eventuali DNS siano funzionanti;

  • eventuali integrazioni siano operative;

  • eventuali scheduler o job siano attivi;

  • eventuali endpoint siano raggiungibili.

13.2 Aggiornamento del file Move to Prod

A rilascio completato, aggiornare il file Move to Prod nelle colonne previste.

Inserire almeno:

  • nome servizio;

  • ambiente;

  • VM utilizzata;

  • DNS utilizzato;

  • repository;

  • eventuali note;

  • data rilascio;

  • riferimento ticket DevOps.

Il rilascio è considerato concluso solo dopo:

  1. completamento ticket DevOps;

  2. verifica tecnica del servizio;

  3. aggiornamento del file Move to Prod.


14. Aggiornamento dei servizi esistenti

Gli aggiornamenti possono riguardare:

  • immagine Docker;

  • file .env;

  • Docker Compose;

  • file locali;

  • DNS;

  • configurazioni accessorie.

14.1 Aggiornamento immagine Docker

Se il servizio è stato configurato con le corrette label di Continuous Delivery, l’aggiornamento dell’immagine può avvenire automaticamente.

In questo caso è sufficiente pubblicare il nuovo tag latest relativo all’ambiente.

Esempi:

dev-latest
coll-latest
prod-latest

Il sistema di CD rileverà la nuova immagine e aggiornerà il servizio secondo la configurazione prevista.

14.2 Aggiornamento tramite CI

Modalità consigliata:

  1. modificare il codice;

  2. committare;

  3. pushare su GitLab;

  4. attendere build della pipeline;

  5. verificare pubblicazione immagine;

  6. verificare aggiornamento automatico del servizio;

  7. controllare log e comportamento applicativo.

14.3 Aggiornamento manuale immagine

In caso di build manuale:

docker build -t registry.gitlab.com/gruppo/progetto/nome-servizio:dev-latest .
docker push registry.gitlab.com/gruppo/progetto/nome-servizio:dev-latest

Dopo il push, verificare che il sistema remoto abbia recepito l’aggiornamento.


15. Aggiornamento di .env, Compose o file locali

Gli aggiornamenti che non riguardano solamente l’immagine Docker devono passare tramite ticket DevOps.

15.1 Tipologia ticket

La tipologia da usare è:

Aggiornamento microservizio

15.2 Informazioni richieste

Nel ticket specificare:

  • servizio da aggiornare;

  • ambiente interessato;

  • VM interessata;

  • modifica richiesta;

  • nuovo file .env, se necessario;

  • link Bitwarden Send aggiornato;

  • nuovo Docker Compose, se necessario;

  • file da inserire o sostituire;

  • path di destinazione;

  • eventuali istruzioni di riavvio;

  • eventuali verifiche da eseguire.

15.3 Aggiornamento del file .env

Se cambia il file .env:

  1. aggiornare il contenuto;

  2. salvare la nuova versione in Bitwarden;

  3. creare un nuovo Bitwarden Send;

  4. allegare il Send al ticket;

  5. indicare chiaramente che il servizio deve essere riavviato, se necessario.

15.4 Aggiornamento del Compose

Se cambia il Docker Compose:

  1. testare il Compose localmente;

  2. verificare che l’immagine esista sul registry;

  3. allegare il nuovo Compose al ticket;

  4. descrivere le modifiche principali;

  5. specificare eventuali impatti su volumi, porte, label o reti.

15.5 Aggiornamento di file locali

Se devono essere aggiunti o modificati file locali:

  • allegare i file al ticket;

  • indicare il path di destinazione;

  • specificare se sostituiscono file esistenti;

  • indicare se è necessario riavviare il servizio.

Esempio:

Sostituire il file configurazione.xlsx nella cartella ./data/config/
Aggiungere la cartella ./data/shapes/ con il contenuto allegato
Riavviare il servizio al termine della copia

16. Template ticket Delivery microservizio

Titolo:
[DELIVERY MICROSERVIZIO] <nome-servizio> - <ambiente>

Descrizione:
Richiedo il rilascio del servizio RPA <nome-servizio> sull’ambiente <dev/collaudo/prod>.

Repository GitLab:
<link repository>

Ambiente:
<dev/collaudo/prod>

Destinazione:
<cloud/quartier generale/VM dedicata>

VM target:
<nome VM>

Immagine Docker:
<registry/image:tag>

Docker Compose:
<allegato o link>

File .env:
<link Bitwarden Send>

DNS richiesti:
<dns richiesti oppure N/A>

File aggiuntivi:
<elenco file, path di destinazione, eventuali note>

Note operative:
<eventuali istruzioni specifiche>

Verifiche richieste:
- avvio container
- verifica log
- verifica endpoint/scheduler/job
- verifica DNS, se presente

17. Template ticket Aggiornamento microservizio

Titolo:
[AGGIORNAMENTO MICROSERVIZIO] <nome-servizio> - <ambiente>

Descrizione:
Richiedo l’aggiornamento del servizio RPA <nome-servizio> sull’ambiente <dev/collaudo/prod>.

Servizio:
<nome-servizio>

Ambiente:
<dev/collaudo/prod>

VM:
<nome VM>

Tipo aggiornamento:
- immagine Docker
- file .env
- Docker Compose
- file locali
- DNS
- altro

Dettaglio modifica:
<descrizione dettagliata della modifica>

Nuova immagine Docker:
<registry/image:tag oppure N/A>

Nuovo file .env:
<link Bitwarden Send oppure N/A>

Nuovo Docker Compose:
<allegato/link oppure N/A>

File da aggiungere/sostituire:
<elenco file e path di destinazione oppure N/A>

Riavvio richiesto:
<sì/no>

Note operative:
<eventuali dettagli aggiuntivi>

18. Checklist finale rilascio

Prima di considerare concluso il rilascio, verificare:

  • ticket DevOps completato;

  • servizio avviato;

  • log verificati;

  • DNS funzionante, se previsto;

  • credenziali salvate correttamente in Bitwarden;

  • file .env non presente nel repository;

  • Compose corretto sull’ambiente;

  • immagine corretta in esecuzione;

  • file esterni presenti;

  • Move to Prod aggiornato;

  • eventuali stakeholder informati.


19. Regole pratiche da ricordare

19.1 Non rilasciare codice non testato

Prima del rilascio, il servizio deve essere stato testato almeno:

  • a crudo;

  • con Compose local;

  • con Compose dev o Compose equivalente all’ambiente remoto.

19.2 Non committare file .env

I file .env reali non devono essere salvati nel repository.

Nel repository deve essere presente solo un file di esempio, come:

.env.example

19.3 Non usare path assoluti locali nei Compose

I mount devono partire dalla cartella corrente:

./data:/app/data

E non da path assoluti della macchina dello sviluppatore:

/home/nomeutente/progetto/data:/app/data

19.4 Non dipendere dal repository completo in remoto

In ambiente remoto il servizio deve funzionare con:

  • immagine Docker;

  • Docker Compose;

  • file .env;

  • file esterni dichiarati.

19.5 Aggiornare sempre Move to Prod

Il file Move to Prod è necessario per mantenere tracciabilità operativa dei servizi rilasciati.

Ogni rilascio o variazione significativa deve essere riportata nel file.


20. Flusso sintetico

Nuovo rilascio

Sviluppo codice
↓
Validazione repository
↓
Test a crudo
↓
Test Compose local
↓
Test Compose dev/coll/prod
↓
Build immagine
↓
Push immagine su GitLab Registry
↓
Preparazione file .env ambiente
↓
Salvataggio .env su Bitwarden
↓
Creazione Bitwarden Send
↓
Scelta VM da Move to Prod
↓
Apertura ticket Delivery microservizio
↓
Lavorazione DevOps
↓
Verifica servizio
↓
Aggiornamento Move to Prod
↓
Rilascio concluso

Aggiornamento servizio

Modifica codice/configurazione
↓
Test locale
↓
Se cambia solo immagine:
    push nuovo tag latest ambiente
    verifica aggiornamento automatico CD
↓
Se cambiano env/compose/file:
    aggiornamento Bitwarden se necessario
    apertura ticket Aggiornamento microservizio
    lavorazione DevOps
↓
Verifica servizio
↓
Aggiornamento Move to Prod se necessario