La sincronizzazione automatica dei file su un server FTP ogni volta che viene effettuato un push su un repository GitHub è un modo utile per mantenere il sito web o l'applicazione aggiornati. Questo processo può essere automatizzato utilizzando GitHub Actions, un servizio di integrazione continua e consegna continua (CI/CD) ospitato da GitHub.
Cosa sono le Github Actions ?
Github Actions è una piattaforma di integrazione continua e consegna continua (CI/CD) basata su cloud, integrata direttamente in GitHub. Permette agli sviluppatori di automatizzare diverse attività del flusso di lavoro del software, come il testing o la creazione di pacchetti alla distribuzione o la pubblicazione.
I vantaggi sono legati soprattutto all'automazione delle attività ripetitive, velocizzando il processo di sviluppo e riducendo gli errori manuali, utilizzando una vasta gamma di azioni predefinite e la possibilità di crearne di personalizzate per soddisfare esigenze specifiche, attraverso un'interfaccia utente intuitiva e semplice di configurazione basata su file YAML.
Come si creano ?
Per creare un flusso di lavoro automatico che utilizzi le Github Actions, basta entrare nella repository su cui si vuole lavorare e accedere alla sezione "Actions", quindi "New workflow". A questo punto, abbiamo due possibilità: la prima è quella di scegliere uno dei flussi di lavoro già esistenti e preconfezionati e configurarlo per i nostri usi, la seconda è quella di saltare questo passaggio e lavorare su un file vuoto scegliendo l'opzione "set up a workflow yourself" ed editare a mano il file main.yml per automatizzare le attività desiderate. Completata la scrittura del file, sarà sufficiente committare le modifiche nella propria repository.
Il workflow così definito sarà eseguito automaticamente ogni volta che vengono verificati determinati eventi, come ad esempio un push al repository.
Un workflow per il deploy con FTP
Molto spesso gli hosting condivisi non mettono a disposizione funzionalità avanzate come la sincronizzazione con Github dello spazio web, ma è possibile ottenere lo stesso risultato utilizzando l'accesso FTP allo spazio e le Github Actions.
Seguendo le istruzioni indicate prima, modifichiamo il file main.yml, inserendo queste righe (facendo attenzione all'indentazione delle righe, particolare importante per i file YAML) :
con cui attribuiamo un nome all'attività ed identifichiamo il trigger di attivazione. Nel caso specifico stiamo indicando che il workflow si attiverà solo in caso di "push" effettuato sul branch "master"
Definiamo ora l'elenco dei job da lanciare in caso di attivazione:
indicando un nome (che sarà visibile durante l'esecuzione del job) e la piattaforma su cui far girare il job (generalmente ubuntu-latest). L'id del job (web-deploy) può essere scelto a piacere.
Per ogni job, è possibile definire quali sono gli step da eseguire (sempre indicando un nome ed alcuni parametri).
Definiamo il primo step con cui diamo al workflow sostanzialmente accesso ai file della repository. E' uno step predefinito, in genere presente in tutti i workflow.
Il secondo step, fa uso di una libreria presente sul marketplace delle Github Actions, FTP Deploy
che esegue la vera e propria sincronizzazione FTP. Questo step per funzionare, ha bisogno di alcuni parametri obbligatori:
e, volendo, di alcuni facoltativi.
dry-run: per attivare una sessione di test, che elenca i file, senza fare l'upload reale (in produzione va rimosso)
exclude: per indicare i file che devono essere esclusi dalla sincronizzazione
Il codice completo è questo:
Le variabili secrets
Per evitare di rendere visibili delle informazioni riservate nel file YAML, al posto dei parametri FTP sono stati indicati dei riferimenti segreti:
Per valorizzarli, è sufficiente accedere alla sezione "Settings" della repository, quindi "Secrets and variables", sezione "Actions" e assegnare con "New repository secret" i valori che devono rimanere protetti da occhi indiscreti.
Conclusioni
All'esecuzione del push sul branch indicato, si avvierà il workflow così definito, il cui esito e sviluppo è possibile controllare nella sezione "Actions" della repository
Per le sincronizzazioni successive, invece tutto si dovrebbe svolgere in tempi adeguati.
Commenti
Posta un commento