Esta página descreve como configurar o Cloud Build para criar, testar, colocar em contentores e implementar aplicações Python.
O Cloud Build permite-lhe usar qualquer imagem de contentor disponível publicamente
para executar as suas tarefas de desenvolvimento, incluindo a criação, os testes, a colocação em contentores, o carregamento para o Artifact Registry, a implementação e a poupança dos seus registos de compilação. 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, Cloud Run, Cloud Storage and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Para executar os comandos
gcloudnesta página, instale a CLI do Google Cloud. - Tenha o seu projeto Python à mão, incluindo o ficheiro
requirements.txt. Precisa de umDockerfilejuntamente com o código-fonte. - Se quiser armazenar o contentor criado no Artifact Registry, crie um repositório do Docker no Artifact Registry.
- Se quiser armazenar registos de testes no Cloud Storage, crie um contentor no Cloud Storage.
Autorizações de IAM necessárias
Para armazenar registos de testes no Logging, conceda a função Storage Object Creator (
roles/storage.objectCreator) para o contentor do Cloud Storage à sua conta de serviço de compilação.Para armazenar imagens criadas no Artifact Registry, conceda à conta de serviço de compilação a função Artifact Registry Writer (
roles/artifactregistry.writer).
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 instalar requisitos, adicionar testes unitários e, após a aprovação dos testes, compilar e implementar a app.
No diretório raiz do projeto, crie o ficheiro de configuração do Cloud Build denominado
cloudbuild.yaml.Requisitos de instalação: a imagem
pythondo Docker Hub é pré-instalada com opip. Para instalar dependências a partir depip, adicione um passo de compilação com os seguintes campos:name: defina o valor deste campo comopythonpara usar a imagem do Python do Docker Hub para esta tarefa.entrypoint: a definição deste campo substitui o ponto de entrada predefinido da imagem referenciada emname. Defina o valor deste campo comopippara invocarpipcomo ponto de entrada da etapa de compilação e executar comandospip.args: o campoargsde um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo camponame. Transmita os argumentos para executar o comandopip installneste campo. A flag--userno comandopip installgarante que os passos de compilação subsequentes podem aceder aos módulos instalados neste passo de compilação.
O seguinte passo de compilação adiciona argumentos para instalar requisitos do ficheiro
requirements.txt: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 comopythonpara usar a imagem Python do Docker Hub para a sua tarefa.entrypoint: defina o valor deste campo comopythonpara executar comandospython.args: adicione os argumentos para executar o comandopython pytest.
O passo de compilação seguinte guarda a saída do registo
pytestnum ficheiro XML JUNIT. O nome deste ficheiro é criado com a versão abreviada do ID de commit associado à sua compilação. Um passo de compilação subsequente guarda os registos neste ficheiro no Cloud Storage.Coloque a app num contentor: depois de adicionar o passo de compilação para garantir que os testes foram aprovados, pode compilar a aplicação. O Cloud Build fornece uma imagem Docker pré-criada que pode usar para colocar a sua aplicação Python num contentor. Para colocar a sua app num contentor, adicione os seguintes campos num passo de compilação:
name: defina o valor deste campo comogcr.io/cloud-builders/dockerpara usar a imagem do Docker pré-criada para a sua tarefa.args: adicione os argumentos do comandodocker buildcomo valores para este campo.
O seguinte passo de compilação cria a imagem
myimagee atribui-lhe uma etiqueta com a versão abreviada do ID de confirmação. O passo de compilação usa as substituições predefinidas para o ID do projeto, o nome do repositório e os valores SHA curtos. Por isso, estes valores são substituídos automaticamente no momento da compilação.Enviar o contentor para o Artifact Registry: pode armazenar o contentor criado no Artifact Registry, que é um Google Cloud serviço que pode usar para armazenar, gerir e proteger artefactos de compilação. Para isso, tem de ter um repositório do Docker existente no Artifact Registry. Para configurar o Cloud Build de modo a armazenar a imagem num repositório Docker do Artifact Registry, adicione um passo de compilação com os seguintes campos:
name: defina o valor deste campo comogcr.io/cloud-builders/dockerpara usar a imagem do criadordockeroficial para a sua tarefa.args: adicione os argumentos do comandodocker pushcomo valores deste campo. Para o URL de destino, introduza o repositório Docker do Artifact Registry onde quer armazenar a imagem.
O seguinte passo de compilação envia a imagem que compilou no passo anterior para o Artifact Registry:
Opcional: se quiser que o Cloud Build gere informações de proveniência da compilação das cadeias de fornecimento para artefactos de software (SLSA), conclua o seguinte:
- Use o campo
imagesno passo de compilação em vez de usar um passo de compilaçãoDocker pushseparado. - Adicione
requestedVerifyOption: VERIFIEDà secçãooptionsdo ficheiro de configuração de compilação.
Implemente o contentor no Cloud Run: para implementar a imagem no Cloud Run, adicione um passo de compilação com os seguintes campos:
name: defina o valor deste campo comogoogle/cloud-sdkpara usar a imagem da CLI gcloud para invocar o comandogcloudpara implementar a imagem no Cloud Run.args: adicione os argumentos do comandogcloud run deploycomo os valores deste campo.
O seguinte passo de compilação implementa a imagem criada anteriormente no Cloud Run:
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:
O fragmento seguinte mostra o ficheiro de configuração de compilação completo para todos os passos descritos acima:
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?
- Saiba como ver os resultados da compilação.
- Saiba como proteger as compilações.
- Saiba como criar aplicações Python autónomas.
- Saiba como usar dependências privadas.
- Saiba como resolver problemas de erros de compilação.