Creare e testare applicazioni Python

Questa pagina descrive come configurare Cloud Build per compilare e testare le applicazioni Python, caricare gli artefatti in Artifact Registry, generare informazioni sull'origine e salvare i log di test in Cloud Storage.

Cloud Build ti consente di utilizzare qualsiasi immagine container disponibile pubblicamente per eseguire le tue attività. L'immagine python pubblica di Docker Hub è preinstallata con gli strumenti python e pip. Puoi configurare Cloud Build per utilizzare questi strumenti per installare le dipendenze, eseguire la compilazione ed eseguire i test delle unità.

Prima di iniziare

Le istruzioni riportate in questa pagina presuppongono che tu abbia dimestichezza con Python. Inoltre:

  • Enable the Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Enable the APIs

  • Per eseguire i comandi gcloud in questa pagina, installa Google Cloud CLI.
  • Tieni a portata di mano il progetto Python.
  • Avere un repository Python in Artifact Registry. Se non ne hai uno, crea un nuovo repository.
  • Se vuoi archiviare i log di test in Cloud Storage, crea un bucket in Cloud Storage.

Autorizzazioni IAM richieste

Per istruzioni su come concedere questi ruoli, consulta Concedere un ruolo utilizzando la pagina IAM.

Configurazione delle build Python

Questa sezione illustra un esempio di file di configurazione di build per un'app Python. Contiene i passaggi di compilazione per installare i requisiti, aggiungere i test di unità e, dopo il superamento dei test, compilare e eseguire il deployment dell'app.

  1. Nella directory principale del progetto, crea un file di configurazione Cloud Build chiamato cloudbuild.yaml.

  2. Requisiti di installazione: l'immagine python di Docker Hub è preinstallata con pip. Per installare le dipendenze da pip, aggiungi un passaggio di compilazione con i seguenti campi:

    • name: imposta il valore di questo campo su python o python:<tag> per utilizzare l'immagine Python di Docker Hub per questa attività. Per visualizzare un elenco dei tag disponibili per altre immagini Python, consulta il riferimento di Docker Hub per l'immagine Python.
    • entrypoint: l'impostazione di questo campo sostituisce il punto di contatto predefinito dell'immagine a cui si fa riferimento in name. Imposta il valore di questo campo su pip per richiamare pip come punto di contatto del passaggio di compilazione ed eseguire i comandi pip.
    • args: il campo args di un passaggio di compilazione prende un elenco di argomenti e li passa all'immagine a cui fa riferimento il campo name. Passa gli argomenti per eseguire il comando pip install in questo campo. Il flag --user nel comando pip install assicura che i passaggi di compilazione successivi possano accedere ai moduli installati in questo passaggio di compilazione.

    Il seguente passaggio di compilazione aggiunge argomenti ai requisiti di installazione:

     steps:
        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pip', 'install', '--upgrade', 'pip']
        - name: python
          entrypoint: python
          args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
    
  3. Aggiungi test di unità: se hai definito test di unità nella tua applicazione utilizzando un framework di test come pytest, puoi configurare Cloud Build per eseguire i test aggiungendo i seguenti campi in un passaggio di compilazione:

    • name: imposta il valore di questo campo su python per utilizzare l'immagine Python da Docker Hub per l'attività.
    • entrypoint: imposta il valore di questo campo su python per eseguire i comandi python.
    • args: aggiungi gli argomenti per l'esecuzione del comando python pytest.

    Il seguente passaggio di compilazione salva l'output del log pytest in un file XML JUNIT. Il nome di questo file viene creato utilizzando $SHORT_SHA, la versione breve dell'ID commit associato alla tua build. Un passaggio di compilazione successivo salverà i log in questo file in Cloud Storage.

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
    
  4. Build: nel file di configurazione della build, definisci il builder e il args per compilare l'applicazione:

    • name: imposta il valore di questo campo su python per utilizzare l'immagine Python da Docker Hub per l'attività.
    • entrypoint: imposta il valore di questo campo su python per eseguire i comandi python.
    • args: aggiungi gli argomenti per l'esecuzione della compilazione.

    Il seguente passaggio di compilazione avvia la compilazione:

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'build']
    
  5. Carica in Artifact Registry:

    Nel file di configurazione, aggiungi il campo pythonPackages e specifica il tuo repository Python in Artifact Registry:

        artifacts:
           pythonPackages:
           - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY'
              paths: ['dist/*']
    

    Sostituisci i seguenti valori:

    • PROJECT-ID è l'ID del progetto Google Cloud che contiene il repository Artifact Registry.
    • REPOSITORY è l'ID del repository.
    • LOCATION è la posizione regionale o multiregionale del repository.
  6. (Facoltativo) Attivare la generazione della provenienza

    Cloud Build può generare metadati verificabili per l'origine della compilazione Supply Chain Levels for Software Artifacts (SLSA) per contribuire a proteggere la pipeline di integrazione continua.

    Per attivare la generazione dell'origine, aggiungi requestedVerifyOption: VERIFIED alla sezione options del file di configurazione.

  7. Salva i log di test in Cloud Storage: puoi configurare Cloud Build in modo da archiviare i log di test in Cloud Storage specificando la posizione e il percorso del bucket esistenti per i log di test. Il seguente passaggio di compilazione memorizza i log di test salvati nel file XML JUNIT in un bucket Cloud Storage:

        artifacts:
        objects:
           location: 'gs://${_BUCKET_NAME}/'
           paths:
              - '${SHORT_SHA}_test_log.xml'
    
  8. Avvia la build: manualmente o utilizzando gli trigger di build.

    Al termine della build, puoi visualizzare i dettagli del repository in Artifact Registry.

    Puoi anche visualizzare i metadati dell'origine della compilazione e convalidare l'origine.

Passaggi successivi