Usare Travis con Firebase per deployare Applicazioni Frontend
Tags: travis, github, frontend, firebase
Published: 2019-04-30 16:09:04

---
title: Usare Travis con Firebase per deployare Applicazioni Frontend
published: true
description: Scrivo questo post perché in questi giorni mi sono imbattuto in un problema molto ricorrente. Ho diversi progetti su Github la maggior parte sono degli esperimenti che faccio per conto mio. Il mio obiettivo era quello di trovare una piattaforma di hosting gratuita, con supporto di Single Page Applications, integrazione con Travis e Https attivo
cover_image: https://thepracticaldev.s3.amazonaws.com/i/ln55pjvrp5kym9175f4o.png
tags: travis, github, frontend, firebase
---

Scrivo questo post perché in questi giorni mi sono imbattuto in un problema molto ricorrente. Ho diversi progetti su Github la maggior parte sono degli esperimenti che faccio per conto mio. Il mio obiettivo era quello di trovare una piattaforma di hosting gratuita, con supporto di Single Page Applications, integrazione con Travis e Https attivo.

## Perche Travis?
Anche se è un progetto personale, non voglio perdere tempo a fare deploy manuali (spostando cartelle su Filezilla) quando ci sono sistemi di CI che mi permettono di automatizzare tutto il flusso di rilascio delle miei applicazioni. Per chi volesse approfondire su travis ecco un [link](https://docs.travis-ci.com/user/for-beginners/).

Cercando in giro per la rete, ho trovato questa lista di possibili candidati:
- Heroku
- Amazon S3
- Github Pages
- Surge.sh
- Firebase

Cominciamo con Heroku che uso già per applicazioni NodeJS, il problema è che devo creare una applicazione server per servire i miei file statici, in più la versione gratuita si spegne quando non viene utilizzata.

Amazon S3 l'ho trovato molto macchinoso e non facile da configurare.

Github Pages era l'ideale poi ho scoperto che non offre supporto a SPA. Quindi se dovete sviluppare una demo dove è presente solo una pagina può andare.

Surge.sh sembrava l'ideale, molto facile da configurare, tutto da riga di comando, ma il problema è che i siti sono lenti. 

Firebase mi ha sorpreso di solito l'uso per creare REST Api, è stato molto semplice la configurazione.

## Configurazione Firebase
La prima cosa che bisogna fare e creare un progetto dalla [console di Firebase](https://console.firebase.google.com):

![Creazione progetto con Firebase](https://thepracticaldev.s3.amazonaws.com/i/ldgdgm9bga4ocit3l1bz.png)

Poi bisogna installare la cli, lo potete fare da riga di commando usando npm:

```sh
npm i -g firebase-cli
```

Dopo l'installazione bisogna lanciare il commando per effettuare la login, verrà aperta una pagina sul browser, dovete confermare i permessi.

```sh
firebase login
```

Per questo esempio ho usato il seguente progetto che ho su Github [ngrx-angular-example](https://github.com/grandemayta/ngrx-angular-example), prima di lanciare il prossimo commando dovete spostarvi nella root del progetto che volete usare.

```sh
firebase init
```

La console di Firebase vi mostrerà una lista di opzioni dovete selezionare "Hosting: Configure and deploy Firebase Hosting sites":

![Firebase init](https://thepracticaldev.s3.amazonaws.com/i/amfw8stsljjymxjzb360.png)

Poi vi chiederà quale cartella usare per deployare la vostra applicazione e se volete il supporto alle SPA. 
Nel mio caso visto che ho usato la CLI di Angular per generare il progetto, la cartella sarà dist/ngrx-angular-example.

Alla fine della configurazione nel vostro progetto verrano inclusi da firebase 2 file:
- .firebasesrc
- firebase.json

All'interno di **firebase.json** trovate la seguente configurazione, che potete modificare quando volete:

```json
{
  "hosting": {
    "public": "dist/ngrx-angular-example",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}
```

## Configurazione Travis
Adesso che abbiamo Firebase configurato, dobbiamo creare il file .travis.yml al cui interno inserire le regole per gestire la build e poi il deploy:

```yml
language: node_js
node_js: 
  - '8'
cache: 
  - yarn
branches:
  only:
  - master
before-script: 
  - yarn
script: 
  - yarn prod
deploy:
  provider: firebase
  skip_cleanup: true
  token:
    secure: $FIREBASE_TOKEN
  project: ngrx-angular-fe-gm
```

Le regole sono molto semplici, nel mio caso voglio che la build si attivi solo sul branch master. Il commando da lanciare per effettuare la build del mio progetto è "yarn prod".

Nelle regole di deploy bisogna aggiungere come provider "firebase" e specificare il nome del progetto che abbiamo creato precedentemente nella [console di firebase](https://console.firebase.google.com/). Per creare il token potete lanciare il seguente commando e poi salvatelo da qualche parte:

```sh
firebase login:ci
```

Se andate sul [sito di travis](http://travis-ci.com) vi potete creare un account usando la vostra utenza di Github, accettate i permessi che vi chiederà:

![Creare account su Travis](https://thepracticaldev.s3.amazonaws.com/i/qgfvh7oxgkl4sj0pxfjo.png)

Selezionate la vostra repo, in fondo a destra dovrebbe comparire la voce "more options" andate su settings e inserite la seguente configurazione:

![Configurazione Travis](https://thepracticaldev.s3.amazonaws.com/i/z0y4shlp19s84j5sx4os.png)

Vi ricordate il token che avete generato prima, copiatelo dentro "Environment Variables". 

Adesso che abbiamo tutto configurato non ci resta che pushare tutto su develop e poi fare una pull request su master, accettando la PR dovrebbe partire la build in automatico, andate su Travis nella sezione branches, dovresti avere una schermata simile a questa:

![Build attiva su Travis](https://thepracticaldev.s3.amazonaws.com/i/mhgbxjbxnjvhtcesrn6z.png)

Se tutto va a buon fine la schermata finale dovrebbe essere questa:

![Build finita su Travis](https://thepracticaldev.s3.amazonaws.com/i/li4e9rstar46uw5rldvw.png)

Adesso che il deploy è finito tornate nella console di Firebase e aprite il vostro progetto, cliccate sulla voce di menu "Hosting" che vi manderà nella pagina dove trovate l'url del vostro sito.

![Firebase Hosting](https://thepracticaldev.s3.amazonaws.com/i/lqkyucw0x94bfnrtyhl1.png)

Adesso potete replicare questo processo ogni volta che iniziate un progetto su Github e non lasciare i vostri progetti abbandonati. In questo modo potete anche condividerli con amici e colleghi e perché no, può servire anche da cavia per progetti futuri.

keep calm and code!