• Non ci sono risultati.

Partiremo dalla Continuous Integration, in generale esistono molte opzioni per con- figurare il server per la CI. Si può usare un’impostazione personalizzata utilizzando le numerose funzionalità di Jenkins oppure si può usare uno dei numerosi servizi che una CI fornisce di tipo "click-and-go".

4.2.1

Tool d’esempio

Nello specifico di Android abbiamo:

2 https://github.com/mockito/mockito 3https://developer.android.com/studio/test/espresso-test-recorder 4 https://checkstyle.sourceforge.io/ 5 https://www.sonarqube.org/ 6 https://spotbugs.github.io/ 7 http://www.analizo.org/

• Tramite CircleCi8: permette Continuous integration per le applicazioni Android

in una macchina Linux virtuale pre-configurata. Per comodità, CircleCI fornisce una serie di immagini Docker per la creazione di app Android. Queste immagini predefinite sono disponibili nell’organizzazione CircleCI su Docker Hub, invece il codice sorgente e i file Docker sono disponibili in un repository GitHub.

• Tramite Travis CI 9: fornisce un servizio per compilare, testare ed eseguire il de-

ploy del proprio codice contenuto da GitHub. È sotto licenza MIT e va configurato tramite YAML. Il software è tecnicamente gratuito e disponibile frammentariamen- te su GitHub con licenze permissive. La società nota, tuttavia, che il gran numero di attività che un utente deve monitorare ed eseguire può rendere difficile per alcuni utenti integrare correttamente la versione Enterprise con la propria infrastruttura. • Tramite TeamCity by JetBrains10. Team City è sia un build management che

un server di Continuous Integration di JetBrains. Al suo interno viene usato anche

Gradle Play Publisher: è il plug-in di Gradle non ufficiale di Android. Può fare

qualsiasi cosa, dalla creazione, il caricamento e la promozione della propria App Bundle o dell’APK alla pubblicazione di elenchi di Applicazioni ed altri metadati. • Tramite Firebase11 e Jenkins: Firebase è una piattaforma di sviluppo di applica-

zioni Web e mobili sviluppata da Firebase, Inc. nel 2011, poi acquisita da Google nel 2014. A partire da ottobre 2018, la piattaforma Firebase ha 18 prodotti, uti- lizzati da 1,5 milioni di Applicazioni. Firebase è principalmente usato per testare la propria applicazione. Jenkins invece è un server di Continuous Integration, ma necessita di un server di installazione per poter funzionare.

• Tramite Bitrise12:un server di CI/CD specifico per dispositivi mobile.

• Tramite Buddybuild13: unisce CI/CD e una soluzione di feedback iterativo in

un’unica piattaforma. 8 https://circleci.com/build-environments/linux/android/ 9https://docs.travis-ci.com/user/languages/android/ 10 https://www.jetbrains.com/teamcity/ 11 https://firebase.google.com/docs/android/setup 12 https://www.bitrise.io/features/android-features 13 https://www.buddybuild.com/blog/buddybuild-for-android

Tutti gli strumenti elencati possono essere applicati nel mondo Android, tra quelle elencate è emerso che:

• CircleCi: non è molto pensato ed ottimizzato per dispositivi mobile, ciò rallen- ta parecchio il processo di sviluppo ed automazione di un’applicazione in quanto risulta difficile configurare il tutto.

• Travis era un’ottima scelta, ma non supporta progetti presenti in BitBucket o GitLab. Oltre a ciò manca un sistema di automazione delle impostazioni di compi- lazione, la distribuzione automatica e la firma automatica del codice, che potrebbe essere evitato tramite uno strumento CI apposito per mobile.

• TeamCity by JetBrains: ha molte funzionalità a pagamento; con il piano gratuito si possono eseguire massimo 100 build e molti plugins presenti non funzionano bene. Oltre a ciò necessita di una macchina server per essere installato e configurato. • Firebase: va utilizzato insieme a Jenkins, quindi necessita di una doppia configu-

razione/installazione, una per Firebase ed una per Jenkins, e, quest’ultimo, come teamcity necessita di una macchina server per essere installato e configurato. • Buddybuild: come TeamCity ha molte funzionalità a pagamento che ne limitano

l’utilizzo.

La scelta quindi è stata quella di Bitrise in quanto oltre a permettere anche il Continuous Deployment, è uno strumento pensato per eseguire CI/CD principalmente su dispositivi Android, oltre a permettere l’integrazione anche personalizzata con tantissimi software (come Bitbucket, GitHub, ecc.). Quasi tutti gli step del workflow sono open source in modo da poterli modificare e condividerli a piacimento oppure crearne di nuovi.

4.2.2

Bitrise

Bitrise è: una soluzione specifica per le app Android, infatti è possibile sia eseguire la CI che configurando e firmare il progetto Android, basterà poi eseguire l’upload del proprio keystore file, aggiungere lo step della firma Android e poi l’app potrà essere di- stribuita. Si possono vedere la UI(User Interface) e gli Unit/UI test tramite una pagina

apposita (con tanto di video, screenshot e log), che sono integrati con Firebase Test Lab’s, grazie a ciò è facile analizzare e trovare i bug presenti nella propria applicazio- ne. Dopo aver configurato il Release, quest’ultimo diventa automatizzato (Continuous Deployment). Per i test si può utilizzare un link pubblico dove una persona può ac- cedere e testare la propria app sul proprio device, oppure per test esterni inviando la propria modifica nell’app di Google Play. Come già detto si può direttamente aggiornare la propria app firmata nello store di Google Play, ciò è possibile grazie al fatto che le proprie credenziali sono state configurate e salvate in modo criptato dentro Bitriste che poi automaticamente eseguirà il deploy delle modifiche dopo che sarà stato eseguito il build dell’app. Oltre a ciò il deploy può essere già eseguito in modo separato trami- te molti tools che possono essere direttamente integrati come Appaloose, DeployGate, Appetize.io, Amazon Device Farm.