5.2 KiB
5.2 KiB
Pipeline Gitea: DEV_build_deploy.yaml
Scopo
Questa pipeline esegue build, publish immagini Docker e deploy Kubernetes dell'ambiente dev.
Flusso alto livello:
- Checkout del repository.
- Login al registry Harbor.
- Build e push delle immagini per ogni servizio in
containers/*. - Creazione del file
kubeconfigda secret. - Sostituzione variabili nei manifest Kubernetes.
- Deploy dei manifest e configurazione listener HTTPS sul Gateway.
Trigger e runner
- Trigger:
pushsu branchmain. - Job:
docker. - Runner richiesto:
POC-Master0.
Definizione pipeline
File: pipeline/DEV_build_deploy.yaml
Step principali:
actions/checkout@v4docker/login-action@v3/root/work/pipeline/build_container.sh ${{ github.event.repository.name }} ${{ vars.REGISTRY }}- creazione
./kubeconfigda${{ secrets.KUBECONFIG_DEV }} /root/work/pipeline/customize.sh dev/root/work/pipeline/deploy.sh
Script eseguiti dalla pipeline
1) build_container.sh
Responsabilità:
- Itera tutte le directory
containers/*/. - Copia i sorgenti da
src/<container>/dentrocontainers/<container>/. - Rileva il Dockerfile (
dockerfileoppureDockerfile). - Costruisce due tag immagine:
${REGISTRY_URL}/${REPO_NAME}/${CONTAINER_NAME}:${COMMIT_SHA}${REGISTRY_URL}/${REPO_NAME}/${CONTAINER_NAME}:latest
- Esegue push su registry.
- Scrive su file
./imglistuna riga per container:IMAGE_TAG_<container>=<image-tag-con-sha>
Supporto multi-arch:
- Se presente
containers/<container>/platform.confcon chiaveplatform=..., usadocker buildx build --platform ... --push. - In assenza di
platform.confusadocker build+docker pushclassico.
Input (argomenti):
$1:REPO_NAME(passato dalla pipeline con${{ github.event.repository.name }}).$2:REGISTRY_URL(passato da${{ vars.REGISTRY }}).
Prerequisiti runtime:
- Docker daemon disponibile nel runner.
- Permessi push su registry.
- Struttura cartelle coerente tra
containers/esrc/.
2) customize.sh
Responsabilità funzionale attesa:
- Carica variabili da:
env/<ENV>/values.envproperties.env- file temporaneo con:
TAG=<commit_sha>- contenuto di
imglist(generato dabuild_container.sh)
- Cerca tutti i manifest
kubernetes/**/*.yaml. - Esegue sostituzione placeholder nel formato
<CHIAVE>con i valori trovati.
Input (argomenti):
$1: ambiente (dev|qa|prod).- In pipeline attuale viene usato
dev.
- In pipeline attuale viene usato
Placeholder parametrizzabili nei manifest:
- Tutte le chiavi presenti in
env/<ENV>/values.env. - Tutte le chiavi presenti in
properties.env. TAG.IMAGE_TAG_<container>(una per ciascun container buildato).
Output:
- Manifest Kubernetes in-place con valori sostituiti.
3) deploy.sh
Responsabilità:
- Cerca manifest CNPG (
apiVersion: postgresql.cnpg.io/v1). - Se trovato:
- Estrae
metadata.namedel cluster PostgreSQL. - Ricava namespace dal role
namespace-deployernel cluster. - Crea/aggiorna ConfigMap
service-configcon:tipodb=postgresurldb=<pg_name>.<namespace>.svc.cluster.local
- Estrae
- Applica tutti i manifest YAML trovati in
kubernetes/(directory per directory). - Invoca
/root/work/pipeline/addlistener.shper configurare listener HTTPS sul Gateway.
Prerequisiti runtime:
kubectldisponibile nel runner../kubeconfigpresente e valido.- Opzionale
yq(se assente, usa fallback conawkper estrazione nome CNPG).
4) addlistener.sh
Responsabilità:
- Legge la chiave
endpointdaproperties.env. - Calcola token host-based dal dominio.
- Invoca
/root/work/pipeline/add-listener.shpassando:<endpoint>https-<token><token>-secret
Input (argomenti):
$1opzionale: path file properties (defaultproperties.env).
Comportamento:
- Se file non esiste o
endpointnon valorizzato: termina senza errore bloccante (exit 0).
5) add-listener.sh
Responsabilità:
- Effettua patch JSON sulla risorsa Gateway Kubernetes:
- Gateway:
main-gateway - Namespace:
nginx-gateway
- Gateway:
- Aggiunge un listener HTTPS con certificato TLS da Secret.
- Verifica idempotenza per
nameehostnamegià presenti.
Input (argomenti):
$1:hostname$2:name$3:secret-name
Parametrizzazione complessiva
Variabili Gitea Actions
vars.REGISTRY: URL registry target.
Secret Gitea Actions
secrets.HARBOR_USERNAMEsecrets.HARBOR_PASSWORDsecrets.KUBECONFIG_DEV
File di configurazione repository
env/dev/values.env(oqa,prodse si cambia argomento dicustomize.sh)properties.envcontainers/<service>/platform.conf(opzionale)
Parametri indiretti derivati
- Nome repository da
${{ github.event.repository.name }}. - SHA commit da
git rev-parse HEAD. - Tag immagine per servizio in
imglist.
Note operative importanti
- Il file
imglistviene creato/appeso dabuild_container.she poi letto dacustomize.sh; il job deve mantenere lo stesso workspace tra step. - I manifest Kubernetes vengono modificati in-place da
sed -i. - La parte Gateway dipende da:
- presenza di
endpointinproperties.env - esistenza della risorsa
Gateway/nginx-gateway/main-gateway - esistenza del Secret TLS con nome
<token>-secret
- presenza di