Crie e teste aplicações Python

Esta página descreve como configurar o Cloud Build para criar e testar as suas aplicações Python, carregar os seus artefactos para o Artifact Registry, gerar informações de proveniência e guardar os registos de testes no Cloud Storage.

O Cloud Build permite-lhe usar qualquer imagem de contentor disponível publicamente para executar as suas tarefas. A imagem python pública do Docker Hub vem pré-instalada com as ferramentas python e pip. Pode configurar o Cloud Build usar estas ferramentas para instalar dependências, criar e executar testes de unidades.

Antes de começar

As instruções nesta página pressupõem que tem conhecimentos de Python. Além disso:

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • Para executar os comandos gcloud nesta página, instale a CLI do Google Cloud.
  • Tenha o seu projeto Python à mão.
  • Ter um repositório Python no Artifact Registry. Se não tiver um, crie um novo repositório.
  • Se quiser armazenar registos de testes no Cloud Storage, crie um contentor no Cloud Storage.

Autorizações de IAM necessárias

Para obter instruções sobre como conceder estas funções, consulte o artigo Conceder uma função através da página IAM.

Configurar compilações Python

Esta secção explica um exemplo de ficheiro de configuração de compilação para uma app Python. Tem passos de compilação para gerir os requisitos de instalação, adicionar testes unitários e, após a aprovação dos testes, para compilar e implementar a app.

  1. No diretório raiz do projeto, crie o ficheiro de configuração do Cloud Build denominado cloudbuild.yaml.

  2. Requisitos de instalação: a imagem python do Docker Hub é pré-instalada com o pip. Para instalar dependências a partir de pip, adicione um passo de compilação com os seguintes campos:

    • name: defina o valor deste campo como python ou python:<tag> para usar a imagem do Python do Docker Hub para esta tarefa. Para ver uma lista de etiquetas disponíveis para outras imagens do Python, consulte a referência do Docker Hub para a imagem do Python.
    • entrypoint: a definição deste campo substitui o ponto de entrada predefinido da imagem referenciada em name. Defina o valor deste campo como pip para invocar pip como ponto de entrada da etapa de compilação e executar comandos pip.
    • args: o campo args de um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo campo name. Transmita os argumentos para executar o comando pip install neste campo. A flag --user no comando pip install garante que os passos de compilação subsequentes podem aceder aos módulos instalados neste passo de compilação.

    O passo de compilação seguinte adiciona argumentos para instalar requisitos:

     steps:
        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pip', 'install', '--upgrade', 'pip']
        - name: python
          entrypoint: python
          args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
    
  3. Adicione testes unitários: se definiu testes unitários na sua aplicação através de uma framework de testes, como o pytest, pode configurar o Cloud Build para executar os testes adicionando os seguintes campos num passo de compilação:

    • name: defina o valor deste campo como python para usar a imagem Python do Docker Hub para a sua tarefa.
    • entrypoint: defina o valor deste campo como python para executar comandos python.
    • args: adicione os argumentos para executar o comando python pytest.

    O passo de compilação seguinte guarda a saída do registo pytest num ficheiro XML JUNIT. O nome deste ficheiro é criado através de $SHORT_SHA, a versão abreviada do ID de confirmação associado à sua compilação. Um passo de compilação subsequente guarda os registos neste ficheiro no Cloud Storage.

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
    
  4. Crie: no ficheiro de configuração de compilação, defina o criador e o args para criar a sua aplicação:

    • name: defina o valor deste campo como python para usar a imagem Python do Docker Hub para a sua tarefa.
    • entrypoint: defina o valor deste campo como python para executar comandos python.
    • args: adicione os argumentos para executar a compilação.

    O seguinte passo de compilação inicia a compilação:

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'build']
    
  5. Carregue para o Artifact Registry:

    No ficheiro de configuração, adicione o campo pythonPackages e especifique o seu repositório Python no Artifact Registry:

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

    Substitua os seguintes valores:

    • PROJECT-ID é o ID do projeto que contém o seu repositório do Artifact Registry. Google Cloud
    • REPOSITORY é o ID do repositório.
    • LOCATION é a localização regional ou multirregional do repositório.
  6. Opcional: ative a geração de proveniência

    O Cloud Build pode gerar metadados de proveniência de compilação Supply chain Levels for Software Artifacts (SLSA) verificáveis para ajudar a proteger a sua pipeline de integração contínua.

    Para ativar a geração de proveniência, adicione requestedVerifyOption: VERIFIED à secção options no seu ficheiro de configuração.

  7. Guardar registos de testes no Cloud Storage: pode configurar o Cloud Build para armazenar quaisquer registos de testes no Cloud Storage especificando uma localização e um caminho de contentor existentes para os registos de testes. O seguinte passo de compilação armazena os registos de testes que guardou no ficheiro XML JUNIT num contentor do Cloud Storage:

        artifacts:
        objects:
           location: 'gs://${_BUCKET_NAME}/'
           paths:
              - '${SHORT_SHA}_test_log.xml'
    
  8. Inicie a compilação: manualmente ou usando acionadores de compilação.

    Quando a compilação estiver concluída, pode ver os detalhes do repositório no Artifact Registry.

    Também pode ver metadados de proveniência da compilação e validar a proveniência.

O que se segue?