Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

Progetto Sviluppo Software

Project description

Mendozzi Romelli progetto e sviluppo del software

Link al repository: link (https://gitlab.com/Mendozz/mendozzi_romelli_assignment_pipeline).

Prima bozza della documentazione del primo progetto del corso di progetto e svoluppo del software. Implementazione di una pipeline per la continuous integration e il continuous deployment di un modulo python attraverso l'utilizzo della piattaforma gitlab.

Cosa fa il modulo?

Il modulo si occupa di esporre delle api restfull utilizzate per contattare un'altra api restfull per l'ottenimento di informazioni riguardo la posizione della ISS, una volta ottenute le informazioni, queste sono memorizzate all'interno di un database locale, che deve già esistere, e sono successivamente contattabili.

Prerequisiti

Per utilizzare il modulo sono necessarie i moduli previsti nel file requirements.txt, qui riportati per comodità:

  • mysql-connector-python

  • flask

  • requests

  • pytest

In aggiunta è necessario possedere un'istaza di un server mysql. In essa deve esistere un utente con permessi di selezione e scrittura in un database, che deve già esistere.


Installazione

Per installare il package è possibile utilizzare pip3:

pip3 install pippopippopippo


Utilizzo

L'importazione del modulo avviene attraverso l'uso di :

import iss_finder

Questo modulo permette di poter istanziare, mediante la funzione iss_finder.build_app(user,password, host, database, tabella) un wrapper flask che espone le seguenti risorse:

  • http://<host>:<port>/ -> "it works"
  • http://<host>:<port>/position --> ottiene i dati da un'altra API e li memorizza nel database
  • http://<host>:<port>/last-latitude --> fornisce l'ultima longitudine che ha registrato con /position
  • http://<host>:<port>/last-longitude --> fornisce l'ultima latitudine che ha registrato con /position

Per eseguire l'applicazione creata con z = iss_finder.build_app(*args) è necessario avviare il server Flask mediante: z.run(host=localhost, port=5000)

STAGE PIPELINE

  1. Build

  2. Verify

  3. Test unità

  4. Test integrazione

  5. Package

  6. Deploy

1. Build

Nella fase di build abbiamo semplicemente testato l'installazione delle dipendenze necessarie

2. Verify

Attraverso l'utilizzo del modulo pylint sono stati effettuati i test sulla qualità codice. Il codice scritto non rispetta molte delle normali convenzioni e best practice di sviluppo per cui questo test è autorizzato a fallire senza ripercussioni sull'esecuzione dell'intera pipeline.

3. Test unità

Questi test sono eseguiti per verificare il funzionamento del modulo senza portare a verificare l'integrazione con il database. I test si trovano alla seguente pagina.

4. Test integrazione

L'esecuzione di questi test serve a verificare il corretto funzionamento del modulo con il database MySQL.

La sua esecuzione richiede la presenza di un service, quello di MySQL, affiancato al service principale di python (ovvero quello che interpreta il nostro codice).

I test si possono trovare qui.

5. Package

La realizzazione del package è stata effettuata mediante l'uso di wheel, un modulo Python per la creazione di packages. All'interno di questa fase sono stati usati gli artefatti per consentire di scaricare il modulo direttamente da Gitlab, per un tempo massimo di 10 minuti. Questo consente di poter installare il package in locale attraverso l'artefatto oppure di sfruttare l'artefatto negli stage successivi, (release, deploy) nel master branch.

6. Deploy

Il deploy, eseguito solo sul master branch consiste nell'upload dell'artefatto creato nello stage di package allinterno dei repository di pypi.org. Per eseguire questa fase abbiamo utilizzato quindi un account su pypi.org e abbiamo memorizzato le credenziali nelle variabili di gitlab, richiamandole con ${PYPI_USER} e ${PYPI_PASSWORD}.

7. Release

La release, eseguita solo sul master branch, consiste nell'esempio di installazione del package, mediante il tool pip3 all'interno della macchina virtuale. L'installazione è eseguita mediante l'uso di chiavi SSH. La chiave privata si trova in una variabile di Gitlab, la corrispondente pubblica è memorizzata nel file authorized_keys nella macchina virtuale di azure. Dopo essersi collegato alla macchina virtuale viene eseguito un semplice script bash (esempio.sh), qui riportato per comodità:

python3.7 esempio.py &
pid=$!
sleep 3
curl http://localhost:5000/position
sleep 5
curl http://localhost:5000/last-latitude
sleep 5
curl http://localhost:5000/last-longitude
sleep 4
echo $pid
kill $pid

Questo richiama l'esecuzione del modulo esempio.py, roportato sotto, che lancia un istanza del wrapper Flask ed esegue alcune richieste attraverso curl.

import iss_finder

def test():
        app = iss_finder.build_app("progetto","progetto","localhost", "progetto","coords")
        app.run()

if __name__ == "__main__":
        test()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pippopippopippo, version 0.12
Filename, size File type Python version Upload date Hashes
Filename, size pippopippopippo-0.12-py3-none-any.whl (4.9 kB) File type Wheel Python version py3 Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page