Style guide Santagostino DevOps

Style guide per lo sviluppo

Style guide Santagostino DevOps

L’obiettivo è dare alcune indicazioni su come poter lavorare con la nuova Developer platform di Santagostino.

A questo link trovate invece una OTTIMA StyleGuide per la scrittura codice (prendete spunto, al Santagostion lo facciamo!)

Daremo delle linee guida su:

Utilizzo di GitHub

GitHub è il nostro punto d’inizio per tutti gli sviluppi.

Perchè L’abbiamo scelto?

Consigliamo l’utilizzo delle PullRequest per strutturare meglio i rilasci e per avere un doppio check del codice

Consigliamo l’utilizzo dei test per migliorare la stabilità del codice per quelle parti “critiche” del codice.

Alcune note sulle PR

Indicazioni di stile

Dotenv-Vault e Condivisione Envfiles

Dotenv-vault è lo strumento che utilizziamo per la condivisione e il monitoraggio degli envfile. Gli envfile sono spesso necessari nella fase di start di un progetto e provvedono a fornire i valori per le variabili d’ambiente relative al progetto stesso. Tuttavia gli envfile contengono spesso dati sensibili ed è quindi necessario aggiungere un layer di sicurezza alla condivisone di tali informazioni.

Perchè l’abbiamo scelto?

Nel suo ciclo di vita un Vault deve essere inizializzato una sola volta(Idealmente in fase di inizializzazione del progetto) e aggiornato ogni qualvolta gli envfiles subiscano dei cambiamenti. Vediamo di seguito come è possibile effettuare il primo setup ed utilizzarlo.

Installazione

Se non è ancora stato installato, il primo comando di dotenv-vault su npx lo installerà per noi.

Inizializzazione di un Vault

Per inizializzare un vault è necessario aprire la command line e digitare: npx dotenv-vault new

Questo ci permette di configurare il vault per la prima volta e genera 2 file:

Sincronizzare gli Envfiles

Una volta inizializzato il vault è possibile effettuare l’update delle proprietà dell’envfile e/o recuperare la versione più recente dell’envfile. Da riga di comando:

N.B: make pull-dotenv e make push-dotenv sono rispettivamente i wrapper dei comandi npx dotenv-vault pull e npx dotenv-vault push. Tuttavia per coerenza con gli standard è preferibile utilizzare i wrapper.

Login

Per compiere le azioni pull e push è necessario essere autenticati. Qualora ci fosse bisogno di autenticarsi è sufficiente digitare da riga di comando: npx dotenv-vault login

Si aprirà una scheda del browser dove è possibile effettuare la login.

Gestione accessi ed ispezione del vault

E’ possibile gestire gli accessi al vault e controllarne i contenuti. Da riga di comando è sufficiente digitare: npx dotenv-vault open

Si aprirà una scheda del browser dove è possibile controllare il nostro vault.

Workflows di lavoro

Di seguito disegnamo un flusso di sviluppo che è stato implmentato in tutti gli starterkit e che consigliamo anche per progetti che non partono dagli starterkit.

Da Backstage è possibile “istanziare” un nuovo servizio partendo dallo starterkit che soddisfa i requisiti base.

Flusso per istanziare un nuovo servizio

  1. Entrare su backstage
  2. Scegliere lo starterkit desiderato
  3. Compilare gli step di creazione
  4. Lanciare lo script di creazione/deploy

Flusso d’inizio

  1. Clonare il repository che è stato “istanziato” da backstage
  2. Lanciare il comando make init
  3. Creare branch con il comando make create-branch-feature BRANCH=<nome-brnach> o make create-branch-fix BRANCH=<nome-brnach> per lo sviluppo (usare le linee guida descritte sopra)

Flusso di sviluppo

  1. Se non esiste ancora create il branch di sviluppo (usare le linee guida descritte sopra)
  2. Sviluppare e fare i commit con un messaggio sempre riferito alla card (se esiste)
  3. Pusshare in remote il branch (anche per un backup)
  4. Per chiudere il progetto (se si deve passare ad un’altro) usare make stop oppure docker-compose stop per stoppare il docker

NOTA: usare docker-compose start per attivare i container del progetto già inizializzati e buildati.

Flusso deploy in stage

  1. Aggiornare la docs
  2. NON fare mai il merge su stage, creare una pullrequest indicando un reviewer tra quelli del team
  3. Tenere d’occhio la review per modifiche sul codice o altre segnalazioni
  4. Alla chiusura della PR fare sempre *create a merge commit” *(questo permette a github di non mostrare delle diff sbagliate)

Flusso deploy in master

  1. Aggiornare la docs
  2. NON fare mai il merge su stage, creare una pullrequest indicando un reviewer tra quelli del team
  3. Tenere d’occhio la review per modifiche sul codice o altre segnalazioni
  4. Alla chiusura della PR fare sempre *create a merge commit” *(questo permette a github di non mostrare delle diff sbagliate)

NON DIMENTICARE MAI DI FARE GLI UNIT-TEST DEL TUO CODICE, AIUTERANNO LA MANTENIBILITA’ E LA COOPERAZIONE TRA I DEV!!!

Gli starterkit

Abbiamo creato alcuni starterkit che coprono una buona parte delle possibilità di servizi che possiamo creare.

Uno starterkit è la base di sviluppo che già fornisce alcune funzionalità per aiutare il programmatore e per farlo concentrare sulla business logic, accellerando i tempi di sviluppo (non deve gestire, se non in casi particolari, il deploy e la configurazione del progetto).

Uno starterkit racchiude:

Il makefile

Questo file contiene una serie di script che possono essere utilizati per alcune operazioni.

Aiuta a creare “alias” di comandi.

I comandi che troverete saranno:

Installare dipendenze/plugin/moduli

Indipendentemente dal linguaggio (JS o PHP), per instalalre delel dipendenze, dovete sempre entrare nei container e da li lanciare i comandi. In questo modo non si crea incongruenza con i lockfile dei gestori di pacchetti e non darà errore in prod o stage.

La docs

Docs generica

La documentazione (se si parte dagli starterkit) verrà deployata in automatico, si dovrà solo scriverla, perchè non partira dai commenti nel codice

Verrà deployata su backstage in modo tale che sarà disponibile nel catalogo servizi.

La docs usa anche PLANTUML un ottimo plugin per fare grafici in markdown e utile per avere una documentaizone più strututrata e di facile lettura.

Come creare una nuova pagina nelal docs?

  1. Editare il file mkdocs.yml aggiungendo la voce di menu desiderata e il path del file MD desiderato
  2. Creare ed editare il fiel di pagina in /docs/

Docs swagger per le API

Se il servizio avrà delle API che potranno essere consumate all’esterno, è bene predisporre anche il file swagger per la documentazione delle API.

Anche questo file verrà letto e gestito da backstage per la generazione della documentazione, nell’apposita sezione API.

Come creare la documentazione per le api?

  1. creare la cartella api-docs nella folder principale del progetto.
  2. creare il file <nome-servizio>_api.yml
  3. usare come template questo file swagger backstage template
  4. inserire nella parte definition lo swagger del servizio

Come utilizzare i dati sensibili (dati di login, chiavi di crypt)

I dati per accedere ai servizi (database, token API, chiavi JWT) sono dati molto sensibili, e averli in chiaro su un repository, potrebbero minarne la sicurezza.

Si è scelto di utilizzare le secrets di GitHub per conservare questi dati e passarli sempre come variabili nei workflow e negli ambienti di stage/prod.

L’organizzazione ha già molte chiavi di default che possono essere utilizzate, in più ogni repository può avere le sue personali.

Come utilizzarle?

Localmente : Utilizzare il file .env (nel repository è commentato e deve essere creato come il file .env.template)

Per ambienti di stage e prod

Come utilizzarli

Best practice #1: se la secrets sarà usata da più servizi allora è bene metterla a livello di organizzazione.

Best practice #2: per uniformare l’utilizzo delle secrets è bene utilizzare nomi generali sul progetto (senz aindicare ambinete di STAGE o PROD) cosi che solo nei workflow si vanno a settare le secrets corrette per i vari ambienti su cui si sta facendo il deploy.

Come gestire test sulle chiamate API

Consigliamo di utilizzare il plugin di VSCode REST API perchè permette di avere dei file testuali all’interno del git (opportunamente formattati) per fare chiamate REST.

Il vantaggio sarà quello di condividere tramite GIT le nostre chiamate e di averne alcune di test utili per debug.

NOTA #1: utilizzare estensione .http per avere identazione, colorazione e autocompletamento

NOTA #2: se le nostre API da testare utilizzano delle APIKEY sfruttare i file .env per inserire la chiave cosi rimarrà locale e non sarà pushata su git.

DoD tecnica

Un progetto di sviluppo (grande o piccolo che sia) per noi è considerato finito quando:

Per DoD Tecnica definiamo quei punti che devono essere fatti sul progetto su cui si è lavorato (che sia un servizio nuovo o esistente).

Qui sotto elenchiamo i punti che un DEV dovrebbe sempr efare in un progetto:

Strumenti consigliati

Alcuni strumenti che consigliamo per gestire al meglio un progetto

Plugin di VSCode

Code

Temi e icone e varie