Crea e testa le applicazioni Python

Questa pagina descrive come configurare Cloud Build per creare e testare le tue applicazioni Python, caricare gli artefatti in Artifact Registry, generare informazioni sulla provenienza 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 da Docker Hub è preinstallata con gli strumenti python e pip. Puoi configurare Cloud Build utilizzando questi strumenti per installare dipendenze, creare ed eseguire test delle unità.

Prima di iniziare

Le istruzioni in questa pagina presuppongono che tu conosca Python. Inoltre:

  • Abilita le API Cloud Build, Artifact Registry, and Cloud Storage.

    Abilita le API

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

Autorizzazioni IAM richieste

Per istruzioni sulla concessione di questi ruoli, consulta Concessione di un ruolo utilizzando la pagina IAM.

Configurazione delle build Python

Questa sezione illustra un esempio di file di configurazione della build per un'app Python. Include i passaggi per installare i requisiti, aggiungere i test delle unità e, dopo il superamento dei test, per creare ed eseguire il deployment dell'app.

  1. Nella directory root del progetto, crea il file di configurazione di Cloud Build denominato 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 build 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 ingresso predefinito dell'immagine a cui viene fatto riferimento in name. Imposta il valore di questo campo su pip per richiamare pip come punto di ingresso del passaggio della build ed eseguire i comandi pip.
    • args: il campo args di un passaggio di build accetta 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 garantisce che i passaggi di build successivi possano accedere ai moduli installati in questo passaggio di build.

    Il seguente passaggio di build 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 delle unità: se hai definito i test delle unità nella tua applicazione utilizzando un framework di test come pytest, puoi configurare Cloud Build per l'esecuzione dei test aggiungendo i seguenti campi in un passaggio di build:

    • name: imposta il valore di questo campo su python per utilizzare l'immagine Python di 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 build salva l'output di 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 build. Un passaggio successivo per la build 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 args per creare l'applicazione:

    • name: imposta il valore di questo campo su python per utilizzare l'immagine Python di 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 build.

    Il seguente passaggio di build avvia la build:

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

    Cloud Build genera le informazioni sulla provenienza delle build di Supply chain Levels for Software Artifacts (SLSA) per i pacchetti Python autonomi quando carichi artefatti in Artifact Registry utilizzando i campi python_packages disponibili nel file di configurazione di Cloud Build.

    Nel file di configurazione, aggiungi il campo pythonPackages e specifica il 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 località a livello di una o più regioni del repository.
  6. (Facoltativo) Attiva la provenienza per le build a livello di regione

    Se utilizzi una build a livello di regione, aggiungi il campo requestedVerifyOption in options del file di configurazione della build. Imposta il valore su VERIFIED per attivare la generazione dei metadati di provenienza. Se non aggiungi requestedVerifyOption: VERIFIED, Cloud Build genera la provenienza solo per le build globali.

    options:
      requestedVerifyOption: VERIFIED
    
  7. Salva i log di test in Cloud Storage: puoi configurare Cloud Build in modo da archiviare qualsiasi log di test in Cloud Storage specificando la località e il percorso del bucket esistente per i log di test. Il seguente passaggio di build archivia i log di test che hai salvato 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 i trigger di build.

    Una volta completata la build, puoi visualizzare i dettagli del repository in Artifact Registry.

    Per proteggere la catena di fornitura del software, puoi anche visualizzare i metadati di provenienza della build e convalidare la provenienza.

Passaggi successivi