Automatizzare il processo di deploy è un passo fondamentale per garantire efficienza e ridurre il rischio di errori manuali. GitHub Actions offre un modo semplice ed efficace per automatizzare il flusso di lavoro, dalla scrittura del codice fino al rilascio in produzione. In questa guida, vedremo come utilizzare GitHub Actions per automatizzare il deploy di un'applicazione web.
Cos'è GitHub Actions?
GitHub Actions è una piattaforma di automazione dei flussi di lavoro che consente di eseguire script in risposta a eventi come push, pull request o rilascio di una nuova versione. Può essere utilizzata per eseguire test, build e deployment in ambienti diversi, integrandosi perfettamente con repository di GitHub.
I vantaggi di GitHub Actions
- Automazione
- Integrazione
- Configurazione semplice YAML Ain't Markup Language
- Esecuzione multipiattaforma Linux
Configurare un workflow di deploy
Per iniziare a utilizzare GitHub Actions per il deploy, è necessario creare un workflow nel repository del progetto. Questo flusso di lavoro sarà definito in un file YAML presente in .github/workflows/
.
I passaggi essenziali per creare un workflow di deploy
Per creare un workflow di deploy dobbiamo:
- Creare una cartella per i workflow
- All'interno del repository, bisogno poi creare una cartella denominata
.github/workflows/
- All'interno del repository, bisogno poi creare una cartella denominata
- Creare un file YAML per il workflow
- Creare un file
deploy.yml
.github/workflows/
- Creare un file
- Definire il trigger del workflow
- Il file YAML deve specificare quando il workflow deve essere eseguito, ad esempio dopo un push su
main
- Il file YAML deve specificare quando il workflow deve essere eseguito, ad esempio dopo un push su
Un esempio di base
name: Deploy Application
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Build application
run: npm run build
- name: Deploy to Server
run: |
ssh user@server "cd /var/www/app && git pull && npm install && npm run restart"
Spiegazione del codice
on: push
main
jobs: deploy
runs-on: ubuntu-latest
steps
Esecuzione del workflow
Dopo aver creato il file YAML, ogni push sulla branch main
attiverà automaticamente il workflow. È possibile monitorare l'esecuzione direttamente nella sezione "Actions" di GitHub. Se il deploy non va a buon fine, GitHub Actions mostrerà dettagli sugli errori consentendo di correggerli rapidamente.
Deploy su piattaforme Cloud
GitHub Actions può essere utilizzato per distribuire applicazioni su diverse piattaforme Cloud come Heroku, AWS EC2 e altre.
Deploy su Heroku
- name: Deploy to Heroku
uses: akhileshns/heroku-deploy@v3.12.12
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: "nome-app"
heroku_email: "tuo@email.com"
Deploy su AWS EC2
- name: Deploy to AWS EC2
uses: appleboy/ssh-action@v0.1.4
with:
host: ${{ secrets.AWS_HOST }}
username: ${{ secrets.AWS_USER }}
key: ${{ secrets.AWS_PRIVATE_KEY }}
script: "cd /var/www/app && git pull && npm install && pm2 restart all"
Best practices per GitHub Actions
Non salvare password o chiavi API direttamente nei file YAML ma utilizzare i GitHub Secrets. Ecco un esempio di accesso a una variabile segreta:
env:
API_KEY: ${{ secrets.MY_SECRET_KEY }}
È poi bene implementare un job che esegue test prima del deploy per evitare errori in produzione.
- name: Run Tests
run: npm test
Un workflow più semplice è più veloce ed efficiente, si devono quindi minimizzare i passaggi. Evita step ridondanti e mantieni solo le operazioni essenziali.
Infine, per ridurre i tempi di build, è meglio sfruttare le cache di dipendenze con actions/cache
.
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
Conclusione
GitHub Actions è un potente strumento per automatizzare il processo di deploy, riduce infatti gli eventuali errori e migliora l'efficienza di un team di sviluppo. Grazie alla sua flessibilità e integrazione con numerosi servizi è possibile configurare workflow personalizzati per qualsiasi esigenza. Implementando GitHub Actions nel tuo flusso di lavoro potrai garantire rilasci più rapidi e sicuri delle tue applicazioni.
Se non hai mai utilizzato GitHub Actions inizia creando un semplice workflow e poi esplora le possibilità offerte dall'integrazione con altri strumenti e servizi Cloud. Una volta padroneggiato questo strumento l'automazione del deploy diventerà una parte essenziale della tua pipeline di sviluppo.