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:

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 do 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 um 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 das 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 do 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 do 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) validá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?