Nesta página, descrevemos como configurar o Cloud Build para criar e testar aplicativos Python, fazer upload de artefatos para o Artifact Registry, gerar informações de procedência e salvar os registros de teste no Cloud Storage.
O Cloud Build permite que você use qualquer imagem de contêiner disponível publicamente para executar suas tarefas. A imagem pública python
do Docker Hub vem com as ferramentas python
e pip
pré-instaladas. É possível configurar o Cloud Build para usar essas ferramentas para instalar dependências, criar e executar testes de unidade usando essas ferramentas.
Antes de começar
Nas instruções desta página, pressupomos que você está familiarizado com o Python. Além disso:
-
Ative as APIs Cloud Build, Artifact Registry, and Cloud Storage.
- Para executar os comandos
gcloud
nesta página, instale a Google Cloud CLI. - Tenha seu projeto Python em mãos.
- Ter um repositório Python no Artifact Registry. Se você não tiver um, crie um novo repositório.
- Para armazenar registros de teste no Cloud Storage, crie um bucket no Cloud Storage.
Permissões do IAM obrigatórias
Para armazenar registros de teste no Logging, conceda o papel Criador de objetos do Storage (
roles/storage.objectCreator
) ao bucket do Cloud Storage para a conta de serviço do Cloud Build.Para armazenar imagens criadas no Artifact Registry, conceda o papel de Gravador do Artifact Registry (
roles/artifactregistry.writer
) à conta de serviço do Cloud Build.
Para instruções sobre como conceder esses papéis, consulte Como conceder um papel usando a página do IAM.
Como configurar builds do Python
Nesta seção, você verá um exemplo de arquivo de configuração de versão para um aplicativo Python. Ele tem etapas de versão para instalar requisitos, adicionar testes de unidade e, após a aprovação, criar e implantar o aplicativo.
No diretório raiz do projeto, crie um arquivo de configuração do Cloud Build chamado
cloudbuild.yaml
.Requisitos de instalação: a imagem
python
do Docker Hub vem pré-instalada compip
. Para instalar dependências depip
, adicione uma etapa de versão com os seguintes campos:name
: defina o valor deste campo comopython
oupython:<tag>
para usar a imagem Python do Docker Hub nesta tarefa. Para consultar uma lista de tags disponíveis para outras imagens Python, consulte a referência do Docker Hub para a imagem Python.entrypoint
: a definição desse campo substitui o ponto de entrada padrão da imagem referenciada emname
. Defina o valor desse campo comopip
para invocarpip
como o entrypoint da etapa de versão e execute comandospip
.args
: o campoargs
de uma etapa de criação recebe uma lista de argumentos e os passa para a imagem referenciada pelo camponame
. Transmita os argumentos para executar o comandopip install
nesse campo. A sinalização--user
no comandopip install
garante que as etapas subsequentes de versão possam acessar os módulos instalados nesta etapa de versão.
A etapa de build a seguir adiciona argumentos para os requisitos de instalação:
steps: - name: 'python' entrypoint: 'python' args: ['-m', 'pip', 'install', '--upgrade', 'pip'] - name: python entrypoint: python args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
Adicionar testes de unidade: se você definiu testes de unidade no aplicativo usando um framework de teste, como
pytest
, configure o Cloud Build para executar os testes adicionando os campos a seguir em uma etapa do build:name
: defina o valor desse campo comopython
para usar a imagem Python do Docker Hub na tarefa.entrypoint
: defina o valor desse campo comopython
para executar comandospython
.args
: adicione os argumentos para executar o comandopython pytest
.
A etapa de criação a seguir salva a saída do registro
pytest
em um arquivo XML JUNIT. O nome desse arquivo é criado usando$SHORT_SHA
, a versão abreviada do ID de confirmação associado ao build. Uma próxima etapa de versão salvará os registros nesse arquivo no Cloud Storage.- name: 'python' entrypoint: 'python' args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
Build: no arquivo de configuração do build, defina o builder e o
args
para criar o aplicativo:name
: defina o valor desse campo comopython
para usar a imagem Python do Docker Hub na tarefa.entrypoint
: defina o valor desse campo comopython
para executar comandospython
.args
: adicione os argumentos para executar o build.
A etapa a seguir inicia o build:
- name: 'python' entrypoint: 'python' args: ['-m', 'build']
Faça upload para o Artifact Registry:
O Cloud Build gera informações de procedência do build Supply Chain Levels for Software Artifacts (SLSA) para pacotes Python independentes quando você faz upload de artefatos para o Artifact Registry usando os campos
python_packages
disponíveis no arquivo de configuração do Cloud Build.No arquivo de configuração, adicione o campo
pythonPackages
e especifique o 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 do Google Cloud que contém o repositório do Artifact Registry.
- REPOSITORY é o ID do repositório.
- LOCATION é o local regional ou multirregional do repositório.
Opcional: ativar a procedência para builds regionais
Se você estiver usando um build regional, adicione o campo
requestedVerifyOption
nooptions
no arquivo de configuração do build. Defina o valor comoVERIFIED
para ativar a geração de metadados de procedência. Se você não adicionarrequestedVerifyOption: VERIFIED
, o Cloud Build vai gerar procedência apenas para builds globais.options: requestedVerifyOption: VERIFIED
Salvar registros de teste no Cloud Storage: é possível configurar o Cloud Build para armazenar todos os registros de teste no Cloud Storage especificando um local e um caminho do bucket existente para os registros de teste. A etapa de criação a seguir armazena os registros de teste que você salvou no arquivo XML JUNIT em um bucket do Cloud Storage:
artifacts: objects: location: 'gs://${_BUCKET_NAME}/' paths: - '${SHORT_SHA}_test_log.xml'
Iniciar seu build: manualmente ou usando gatilhos de compilação.
Quando o build for concluído, será possível acessar os detalhes do repositório no Artifact Registry.
Também é possível conferir os metadados de procedência do build e a validação para ajudar a proteger sua cadeia de suprimentos de software.
A seguir
- Saiba como ver os resultados da build.
- Aprenda a proteger builds.
- Saiba como criar e conteinerizar aplicativos Python.
- Aprenda a usar dependências particulares.
- Saiba como realizar implantações azul-verde no Compute Engine.
- Saiba como resolver erros de build.