Esta página fornece práticas recomendadas para acelerar as compilações do Cloud Build.
Criar contentores mais simples
Quando coloca uma aplicação num contentor, os ficheiros que não são necessários no tempo de execução, como dependências de tempo de compilação e ficheiros intermédios, podem ser incluídos inadvertidamente na imagem do contentor. Estes ficheiros desnecessários podem aumentar o tamanho da imagem do contentor e adicionar tempo e custos adicionais à medida que a imagem se move entre o registo de imagens do contentor e o tempo de execução do contentor.
Para ajudar a reduzir o tamanho da imagem do contentor, separe a criação da aplicação, juntamente com as ferramentas usadas para a criar, da montagem do contentor de tempo de execução.
Para mais informações, consulte o artigo Crie contentores mais simples.
Usar uma imagem Docker em cache
A forma mais fácil de aumentar a velocidade de criação da imagem de Docker é especificar uma imagem em cache que possa ser usada para criações subsequentes. Pode especificar a imagem em cache adicionando o argumento --cache-from no ficheiro de configuração de compilação, o que indica ao Docker para compilar usando essa imagem como origem da cache.
Cada imagem do Docker é composta por camadas empilhadas. A utilização de --cache-from recompila todas as camadas a partir da camada alterada até ao final da compilação. Por conseguinte, a utilização de --cache-from não é vantajosa se alterar uma camada nas fases anteriores da compilação do Docker.
Recomendamos que use sempre --cache-from para as suas compilações, mas tenha em atenção as seguintes ressalvas:
- Precisa de uma imagem do Docker criada anteriormente para usar como cache.
- Pode usar
--cache-fromapenas para compilações do Docker. Não pode usá-lo para criadores que criam outro tipo de artefactos. - A imagem em cache tem de ser obtida a partir de um registo, o que pode aumentar o tempo necessário para a compilação.
Os passos seguintes explicam como criar usando uma imagem previamente colocada em cache:
YAML
Na configuração de compilação, adicione instruções para:
- Extraia a imagem em cache do Artifact Registry. O passo de compilação
docker pulldefineentrypointcomobash, o que lhe permite executar o comando e ignorar o erro devolvido. Esta configuração é necessária quando cria uma imagem pela primeira vez e odocker pullnão tem uma imagem existente para extrair. Adicione um argumento
--cache-frompara usar essa imagem em reconstruções.steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker pull ${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest || exit 0'] - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest', '--cache-from', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest' '.' ] images: ['${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest']
- Extraia a imagem em cache do Artifact Registry. O passo de compilação
Crie a imagem com a configuração de compilação anterior:
gcloud builds submit --config cloudbuild.yaml .
JSON
Na configuração de compilação, adicione instruções para:
- Extraia a imagem em cache do Artifact Registry. O passo de compilação
docker pulldefineentrypointcomobash, o que lhe permite executar o comando e ignorar o erro devolvido. Esta configuração é necessária quando cria uma imagem pela primeira vez e odocker pullnão tem uma imagem existente para extrair. - Adicione um argumento
--cache-frompara usar essa imagem em reconstruções.
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": ["-c", "docker pull ${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest || exit 0"] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest", "--cache-from", "${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest", "." ] } ], "images": ["${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest"] }where [IMAGE] is the name of your image.- Extraia a imagem em cache do Artifact Registry. O passo de compilação
Crie a imagem com a configuração de compilação anterior:
gcloud builds submit --config cloudbuild.json .
Colocar em cache diretórios com o Google Cloud Storage
Para aumentar a velocidade de uma compilação, reutilize os resultados de uma compilação anterior. Pode copiar os resultados de uma compilação anterior para um contentor do Cloud Storage, usar os resultados para um cálculo mais rápido e, em seguida, copiar os novos resultados de volta para o contentor. Use este método quando a compilação demorar muito tempo e produzir um pequeno número de ficheiros que não demoram a ser copiados para e do Cloud Storage
Ao contrário da --cache-from, que se destina apenas a compilações do Docker, o armazenamento em cache do Cloud Storage pode ser usado para qualquer criador suportado pelo Cloud Build.
Siga estes passos para colocar diretórios em cache através do Cloud Storage:
YAML
No ficheiro de configuração de compilação, adicione instruções para:
- Copie os resultados de uma compilação anterior do contentor do Cloud Storage.
- Usar os resultados da compilação atual.
Copie os novos resultados de volta para o contentor.
steps: - name: gcr.io/cloud-builders/gcloud args: ['storage', 'cp', 'gs://mybucket/results.zip', 'previous_results.zip'] # operations that use previous_results.zip and produce new_results.zip - name: gcr.io/cloud-builders/gcloud args: ['storage', 'cp', 'new_results.zip', 'gs://mybucket/results.zip']
Crie o código com a configuração de compilação anterior:
gcloud builds submit --config cloudbuild.yaml .
JSON
No ficheiro de configuração de compilação, adicione instruções para:
- Copie os resultados de uma compilação anterior do contentor do Cloud Storage.
- Usar os resultados da compilação atual.
Copie os novos resultados de volta para o contentor.
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "args": ["storage", "cp", "gs://mybucket/results.zip", "previous_results.zip"] }, { // operations that use previous_results.zip and produce new_results.zip }, { "name": "gcr.io/cloud-builders/gcloud", "args": ["storage", "cp", "new_results.zip", "gs://mybucket/results.zip"] } ] }
Crie o código com a configuração de compilação anterior:
gcloud builds submit --config cloudbuild.json .
Evitar o carregamento de ficheiros desnecessários
Quando uma compilação é acionada, o diretório de código é carregado para utilização pelo Cloud Build.
Pode excluir ficheiros que a sua compilação não precisa com um ficheiro
.gcloudignore
para otimizar o tempo de carregamento.
Seguem-se alguns exemplos de ficheiros normalmente excluídos:
- Documentação e exemplos de código para programadores de projetos
- Código de estruturação gerado, ficheiros binários, ficheiros
*.jarou recursos Web compilados usados para desenvolvimento. - Dependências de terceiros pertencentes a fornecedores para desenvolvimento local
Para preparar um ficheiro .gcloudignore para resolver estes casos, crie um ficheiro na raiz do projeto com conteúdos como:
.git
dist
node_modules
vendor
*.jar
A exclusão de código compilado e dependências de terceiros também resulta num processo de compilação mais consistente e num risco reduzido de implementação acidental de código que ainda está em desenvolvimento ativo.
O que se segue?
- Saiba como aumentar a vCPU para compilações.