Esta página descreve como iniciar uma compilação no Cloud Build manualmente através da CLI Google Cloud e da API Cloud Build.
Antes de começar
- Para criar usando a configuração de compilação do Cloud Build, crie um ficheiro de configuração de compilação.
- Tenha o código-fonte da aplicação e o
Dockerfile
prontos. - Ter um repositório Docker para armazenar imagens no Artifact Registry ou criar um repositório.
Autorizações de IAM necessárias
Para receber as autorizações de que precisa para enviar compilações, peça ao seu administrador para lhe conceder as seguintes funções do IAM na sua conta de serviço:
- Armazene registos de compilação no contentor de registos predefinido: Editor do Cloud Build (
roles/cloudbuild.builds.editor
) - Armazene registos de compilação no contentor de registos criado pelo utilizador: Editor do Cloud Build (
roles/cloudbuild.builds.editor
) - Use pools privados: Utilizador do WorkerPool do Cloud Build (
roles/cloudbuild.workerPoolUser
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Executar compilações
Pode especificar a origem da compilação através do campo Origem da compilação. O campo Origem da criação é um dos seguintes: storage_source
, repo_source
, git_source
e connected_repository
.
Envie compilações com storage_source
gcloud
Usando um Dockerfile:
O seu Dockerfile
contém todas as informações necessárias para criar uma imagem do Docker com o Cloud Build.
Para criar usando um Dockerfile
, execute o seguinte comando a partir do diretório que contém o código-fonte e o Dockerfile
:
gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME
Onde:
- LOCATION: a localização regional ou multirregional do seu repositório Docker no Artifact Registry.
- PROJECT_ID: o ID do seu Google Cloud projeto.
- REPOSITORY: o nome do seu repositório do Artifact Registry.
- IMAGE_NAME: o nome da imagem do contentor a ser criada.
O nome completo da imagem a ser criada é LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME
. As imagens enviadas para o Artifact Registry usam a convenção de nomenclatura do Artifact Registry.
O comando gcloud builds submit
:
- Comprime o código da aplicação
Dockerfile
e todos os outros recursos no diretório atual, conforme indicado por.
; - Inicia uma compilação na localização
LOCATION
usando os ficheiros carregados como entrada; - etiqueta a imagem com o nome fornecido;
- Envia a imagem criada para o Artifact Registry.
À medida que a compilação avança, o respetivo resultado é apresentado na janela da shell ou do terminal. Quando a compilação estiver concluída, deverá ver um resultado semelhante ao seguinte:
DONE --------------------------------------------------------------------------------- ID CREATE_TIME DURATION STATUS $BUILD_ID 2023-10-28T15:21:18+00:00 12S SUCCESS
em que $BUILD_ID
é o identificador exclusivo da compilação.
Usando o ficheiro de configuração de compilação do Cloud Build:
Para enviar uma compilação através da configuração de compilação, execute o seguinte comando:
gcloud builds submit --config BUILD_CONFIG SOURCE
Onde:
- BUILD_CONFIG é o caminho para o ficheiro de configuração de compilação.
- SOURCE é o caminho ou o código-fonte do URL.
Quando executa gcloud builds submit
pela primeira vez num Google Cloud projeto, o Cloud Build cria um contentor do Cloud Storage denominado [YOUR_PROJECT_NAME]_cloudbuild
nesse projeto. O Cloud Build usa este contentor para armazenar qualquer código fonte que possa usar para as suas compilações. O Cloud Build não elimina automaticamente o conteúdo neste contentor. Para eliminar objetos que já não está a usar para compilações, pode configurar a configuração do ciclo de vida no contentor ou eliminar manualmente os objetos.
O comando seguinte demonstra como enviar um cloudbuild.yaml
pedido de compilação usando código fonte armazenado num contentor do Cloud Storage.
gcloud builds submit --config cloudbuild.yaml \ gs://BUCKET/SOURCE.tar.gz
Onde:
- BUCKET é o nome do seu contentor no Cloud Storage que contém o código-fonte a compilar.
- SOURCE é o nome do ficheiro de código-fonte comprimido.
Pode usar .
para especificar que o código-fonte está no diretório de trabalho atual:
gcloud builds submit --config=cloudbuild.yaml .
API
Para enviar o pedido de criação através do curl
:
Crie um ficheiro denominado
request.json
com o seguinte conteúdo:{ "source": { "storageSource": { "bucket": "BUCKET", "object": "SOURCE.tar.gz" } }, "steps": [{ "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME", "." ] }], "images": [ "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME" ] }
Onde:
- BUCKET é o nome do seu contentor do Cloud Storage que contém o código-fonte a compilar.
- SOURCE é o nome do ficheiro de código-fonte comprimido.
- IMAGE_NAME é o nome da imagem a ser criada.
- LOCATION: a localização regional ou multirregional do seu repositório Docker no Artifact Registry.
- PROJECT_ID: o ID do seu Google Cloud projeto.
- REPOSITORY: o nome do seu repositório Docker no Artifact Registry.
Neste pedido de compilação, o Cloud Build chama o
docker
passo de compilação com os argumentosbuild -t LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY .
.O nome completo da imagem a ser criada é
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY
.As imagens enviadas para o Artifact Registry usam a convenção de nomenclatura do Artifact Registry.
Execute o seguinte comando, em que
PROJECT_ID
é o ID do seu projeto eGoogle Cloud é uma das regiões suportadas:REGION
curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \ --format='value(credential.access_token)')" \ https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/builds
Neste comando,
curl
enviarequest.json
numa chamada POST para o ponto finalbuilds
para o método da API projects.builds.create.O comando apresenta detalhes sobre a sua compilação na janela da shell ou do terminal. O resultado é uma resposta JSON e tem um aspeto semelhante ao seguinte:
{ "name": "operations/build/$PROJECT-ID/NmZhZW...", "metadata": { "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata", "build": { "id": $BUILD-ID, "status": "QUEUED", "source": { "storageSource": { "bucket": "BUCKET", "object": "SOURCE.tar.gz" } }, "createTime": "2017-05-12T18:58:07.341526Z", "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME", "." ] } ], "timeout": "600s", "images": [ "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME" ], "projectId": $PROJECT-ID, "logsBucket": "gs://...", "sourceProvenance": { "resolvedStorageSource": { "bucket": "BUCKET", "object": "SOURCE.tar.gz" "generation": "..." } }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=$PROJECT_ID" } } }
A resposta JSON é modelada através do recurso
Operation
na API Cloud Build. O campometadata
é modelado com o recursoBuild
. O estadoQUEUED
indica que a compilação está a aguardar execução.
Envie compilações com connected_repository
gcloud
Para executar um pedido de compilação com a origem de compilação de um recurso de repositório de 2.ª geração, execute o seguinte comando:
gcloud builds submit REPOSITORY --revision=REVISION --config=BUILD_CONFIG LOCATION
Onde:
- LOCATION é a localização regional ou multirregional do seu repositório Docker no Artifact Registry.
- REPOSITORY é o nome do repositório de 2.ª geração do Cloud Build, formatado como
projects/*/locations/*/connections/*repositories/*
. - REVISION é a revisão a obter do repositório Git, como um ramo, uma etiqueta, um SHA de commit ou qualquer ref Git.
- BUILD_CONFIG é o caminho para o ficheiro de configuração de compilação.
À medida que a compilação avança, o respetivo resultado é apresentado na janela da shell ou do terminal. Quando a compilação estiver concluída, deverá ver um resultado semelhante ao seguinte:
DONE --------------------------------------------------------------------------------- ID CREATE_TIME DURATION STATUS $BUILD_ID 2023-10-28T15:21:18+00:00 12S SUCCESS
em que $BUILD_ID
é o identificador exclusivo da compilação.
gcloudignore: quando inclui o código-fonte para a compilação, o comando anterior carrega todos os ficheiros no diretório especificado para Google Cloud para compilar. Se quiser excluir determinados ficheiros no diretório, pode incluir um ficheiro denominado .gcloudignore
no diretório de carregamento de nível superior. Os ficheiros especificados no ficheiro .gcloudignore
serão ignorados. Se .gcloudignore
não estiver presente no diretório de carregamento de nível superior, mas existir um ficheiro .gitignore
, a CLI gcloud gera um ficheiro .gcloudignore
compatível com o Git que respeita os ficheiros .gitignore
editados. Para mais informações, consulte a gcloudignore
documentação.
Se não tiver código-fonte para transmitir à sua compilação, use a flag --no-source
onde BUILD_CONFIG é o caminho para o ficheiro de configuração da compilação:
gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
API
Para enviar o pedido de criação através do curl
:
Crie um ficheiro denominado
request.json
com o seguinte conteúdo:{ "source": { "connectedRepository": { "repository": "REPOSITORY", "revision": "REVISION" } }, "steps": [{ "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME", "." ] }], "images": [ "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME" ] }
Onde:
- REPOSITORY é o nome do repositório de 2.ª geração do Cloud Build, formatado como
projects/*/locations/*/connections/*repositories/*
. - REVISION é a revisão a obter do repositório Git, como um ramo, uma etiqueta, um SHA de commit ou qualquer ref Git.
- IMAGE_NAME é o nome da imagem a ser criada.
- LOCATION: a localização regional ou multirregional do seu repositório Docker no Artifact Registry.
- PROJECT_ID: o ID do seu Google Cloud projeto.
Neste pedido de compilação, o Cloud Build chama o
docker
passo de compilação com os argumentosbuild -t LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME .
.O nome completo da imagem a ser criada é
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME
. As imagens enviadas para o Artifact Registry usam a convenção de nomenclatura do Artifact Registry.- REPOSITORY é o nome do repositório de 2.ª geração do Cloud Build, formatado como
Execute o seguinte comando em que
PROJECT_ID
é o ID do seu projeto e REGION é uma das regiões suportadas:Google Cloudcurl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \ --format='value(credential.access_token)')" \ https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/builds
Neste comando,
curl
enviarequest.json
numa chamada POST para o ponto finalbuilds
para o método da API projects.builds.create.O comando apresenta detalhes sobre a sua compilação na janela da shell ou do terminal. O resultado é uma resposta JSON e tem um aspeto semelhante ao seguinte:
{ "name": "operations/build/$PROJECT-ID/NmZhZW...", "metadata": { "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata", "build": { "id": $BUILD-ID, "status": "QUEUED", "source": { "connectedRepository": { "repository": "REPOSITORY", "revision": "REVISION" } }, "createTime": "2017-05-12T18:58:07.341526Z", "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME", "." ] } ], "timeout": "600s", "images": [ "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME" ], "projectId": PROJECT_ID, "logsBucket": "gs://...", "sourceProvenance": { "resolvedConnectedRepository": { "repository": "REPOSITORY", "revision": "REVISION.tar.gz" "generation": "..." } }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=PROJECT_ID" } } }
A resposta JSON é modelada através do recurso
Operation
na API Cloud Build. O campometadata
é modelado com o recursoBuild
. O estadoQUEUED
indica que a compilação está a aguardar execução.
O que se segue?
- Saiba como criar acionadores manuais.
- Saiba como ver os resultados da compilação.
- Saiba como resolver problemas de erros de compilação.