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.
- Para executar os comandos
gcloud
nesta página, instale a CLI do Google Cloud. - Tenha o seu projeto Python à mão, incluindo o ficheiro
requirements.txt
. Precisa de umDockerfile
juntamente com o código-fonte. - Se quiser armazenar o contentor criado no Artifact Registry, crie um repositório 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 do IAM.
Configurar compilações Python
Esta secção explica um exemplo de um ficheiro de configuração de compilação para uma app Python. Tem passos de compilação para instalar requisitos, adicionar testes unitários e, depois de os testes serem aprovados, compilar e implementar a app.
No diretório raiz do projeto, crie um ficheiro de configuração do Cloud Build denominado
cloudbuild.yaml
.Requisitos de instalação: a imagem
python
do 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 comopython
para 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 comopip
para invocarpip
como ponto de entrada da etapa de compilação e executar comandospip
.args
: o campoargs
de um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo camponame
. Transmita os argumentos para executar o comandopip install
neste campo. A flag--user
no comandopip install
garante 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 comopython
para usar a imagem do Python do Docker Hub para a sua tarefa.entrypoint
: defina o valor deste campo comopython
para executar comandospython
.args
: adicione os argumentos para executar o comandopython pytest
.
O passo de compilação seguinte guarda a saída do registo
pytest
num 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/docker
para usar a imagem do Docker pré-criada para a sua tarefa.args
: adicione os argumentos do comandodocker build
como valores para este campo.
O seguinte passo de compilação cria a imagem
myimage
e 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/docker
para usar a imagem do criadordocker
oficial para a sua tarefa.args
: adicione os argumentos do comandodocker push
como 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
images
no passo de compilação em vez de usar um passo de compilaçãoDocker push
separado. - Adicione
requestedVerifyOption: VERIFIED
à secçãooptions
do 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-sdk
para usar a imagem da CLI gcloud para invocar o comandogcloud
para implementar a imagem no Cloud Run.args
: adicione os argumentos do comandogcloud run deploy
como 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.