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.
- 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 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 a função Artifact Registry Writer (
roles/artifactregistry.writer
) à conta de serviço de compilação.
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.
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
oupython:<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 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 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']
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 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']
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 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 a compilação.
O seguinte passo de compilação inicia a compilação:
- name: 'python' entrypoint: 'python' args: ['-m', 'build']
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.
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çãooptions
no seu ficheiro de configuração.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'
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 e colocar em contentores aplicações Python.
- Saiba como usar dependências privadas.
- Saiba como fazer implementações azul/verde no Compute Engine.
- Saiba como resolver problemas de erros de compilação.