Use as imagens de contêiner do Docker Hub para executar as tarefas no Cloud Build. Se o build produz imagens, é possível também enviá-las ao Docker Hub. Nesta página, descrevemos como gravar arquivos de configuração de build para enviar e extrair imagens do Docker Hub. Para uma visão geral de todos os campos disponíveis em um arquivo de configuração de build, consulte Visão geral da configuração de build.
Como extrair imagens públicas do Docker Hub
É possível extrair imagens oficiais do Docker, imagens certificadas pelo Docker e imagens personalizadas armazenadas no Docker Hub na etapa de criação ao especificar o nome da imagem no campo name
. Primeiro, o Cloud Build extrairá a imagem especificada do Docker Hub e a usará para executar a etapa de criação.
No exemplo abaixo, o Cloud Build extrai a imagem do Docker de maven
para executar o comando mvn
especificado em args
:
YAML
steps:
- name: "maven"
args: ["mvn", "--version"]
JSON
{
"steps": [
{
"name": "maven",
"args": [
"mvn",
"--version"
]
}
]
}
Como armazenar credenciais do Docker no Gerenciador de secrets
Para extrair imagens privadas e enviar imagens públicas e privadas para o Docker Hub, o Cloud Build precisa ser autenticado no Docker com suas credenciais. Para incluir credenciais do Docker nos seus builds, primeiro você precisa armazenar suas credenciais no Gerenciador de secrets e, em seguida, conceder permissão para que o Cloud Build acesse o secret do Secret Manager.
Para armazenar credenciais do Docker no Gerenciador de secrets:
Acesse a página do Secret Manager no console do Google Cloud:
Na página Gerenciador de secrets, clique em Criar secret.
Na página Criar secret, em Nome, digite
docker-username
.No campo Valor do secret, insira seu nome de usuário do Docker.
Deixe a seção Regiões inalterada.
Clique no botão Criar secret.
Repita as etapas acima para armazenar a senha do Docker no Gerenciador de secrets.
Para conceder o papel de IAM de Acessador de secrets do Gerenciador de secrets ao secret da conta de serviço do Cloud Build:
Abra a página do Secret Manager no console do Google Cloud:
Marque a caixa de seleção do secret correspondente ao seu nome de usuário e senha do Docker.
Se ela ainda não estiver aberta, clique em Mostrar painel de informações para abrir o painel.
No painel, em Permissões, clique em Adicionar principal.
Na caixa de texto Novos principais, insira o endereço de e-mail da sua conta de serviço do Cloud Build no formato
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
, em quePROJECT_NUMBER
é o número do projeto: onde você está executando os builds. Encontre esse número na página de configurações do projeto.Na caixa suspensa Selecionar um papel, selecione o papel Acessador de secrets do Gerenciador de secrets.
Clique em Save.
Como extrair imagens particulares do Docker Hub
Para extrair imagens particulares do Docker Hub:
Certifique-se de ter armazenado as credenciais do Docker no Secret Manager e concedido permissões para que o Cloud Build acesse o secret.
No arquivo de configuração de build:
- Depois de todo o build
steps
, adicione um campoavailableSecrets
especificando a versão secreta e a variável do ambiente para o nome de usuário e a senha do Docker. - Na etapa de criação, em que você quer especificar o nome de usuário e a senha:
- Adicione um campo
entrypoint
que aponte parabash
para usar a ferramenta bash na etapa de versão. Isso é necessário para fazer referência à variável de ambiente do secret. - Adicione um campo
secretEnv
especificando a variável de ambiente para nome de usuário e senha. - No campo
args
, adicione uma sinalização-c
como primeiro argumento. Qualquer string que você passar depois de -c será tratada como um comando. Para mais informações sobre como executar comandos bash com -c, consulte a documentação do bash. - Ao especificar o secret no campo
args
, especifique-o usando a variável de ambiente prefixada com$$
.
- Adicione um campo
O seguinte arquivo de configuração da compilação mostra como fazer login no Docker usando o nome de usuário e a senha do Docker armazenados no Secret Manager e como executar uma imagem privada.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: "gcr.io/cloud-builders/docker" entrypoint: 'bash' args: ['-c', 'docker run $$USERNAME/REPOSITORY:TAG'] secretEnv: ['USERNAME'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker run $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }
Substitua os valores dos marcadores nos comandos acima pelo seguinte:
PROJECT_ID
: o ID do projeto do Google Cloud em que você armazenou as chaves secretas.DOCKER_USERNAME_SECRET_NAME
: o nome do secret correspondente ao seu nome de usuário do Docker.DOCKER_USERNAME_SECRET_VERSION
: a versão do secret do seu nome de usuário do Docker.DOCKER_PASSWORD_SECRET_NAME
: o nome do secret correspondente à sua senha do Docker.DOCKER_PASSWORD_SECRET_VERSION
: a versão do secret da sua senha do Docker.REPOSITORY
: o nome do repositório do Docker de onde você está extraindo a imagem.TAG
: o nome da tag da imagem.
- Depois de todo o build
Use o arquivo de configuração de build para iniciar manualmente um build ou para automatizar builds usando acionadores.
Como enviar imagens ao Docker Hub
Para enviar imagens públicas e particulares ao Docker Hub:
Certifique-se de ter armazenado as credenciais do Docker no Secret Manager e concedido permissões para que o Cloud Build acesse o secret.
No arquivo de configuração de build:
- Depois de todo o build
steps
, adicione um campoavailableSecrets
especificando a versão secreta e a variável do ambiente para o nome de usuário e a senha do Docker. - Na etapa de criação, em que você quer especificar o nome de usuário e a senha:
- Adicione um campo
entrypoint
que aponte parabash
para usar a ferramenta bash na etapa de versão. Isso é necessário para fazer referência à variável de ambiente do secret. - Adicione um campo
secretEnv
especificando a variável de ambiente para nome de usuário e senha. - No campo
args
, adicione uma sinalização-c
como primeiro argumento. Qualquer string que você passar depois de-c
será tratada como um comando. Para mais informações sobre como executar comandos bash com -c, consulte a documentação do bash. - Ao especificar o secret no campo
args
, especifique-o usando a variável de ambiente prefixada com$$
.
- Adicione um campo
No exemplo de arquivo de configuração de build a seguir, mostramos como fazer login no Docker, criar uma imagem com o código-fonte armazenado localmente e enviá-la para o repositório Docker.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker build -t $$USERNAME/REPOSITORY:TAG .'] secretEnv: ['USERNAME'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker push $$USERNAME/REPOSITORY:TAG'] secretEnv: ['USERNAME'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker build -t $$USERNAME/REPOSITORY:TAG ." ], "secretEnv": [ "USERNAME" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker push $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }
Substitua os valores dos marcadores nos comandos acima pelo seguinte:
PROJECT_ID
: o ID do projeto do Google Cloud em que você armazenou as chaves secretas.DOCKER_USERNAME_SECRET_NAME
: o nome do secret correspondente ao seu nome de usuário do Docker.DOCKER_USERNAME_SECRET_VERSION
: a versão do secret do seu nome de usuário do Docker.DOCKER_PASSWORD_SECRET_NAME
: o nome do secret correspondente à sua senha do Docker.DOCKER_PASSWORD_SECRET_VERSION
: a versão do secret da sua senha do Docker.REPOSITORY
: o nome do repositório do Docker para o qual você está enviando a imagem.TAG
: o nome da tag da imagem.
- Depois de todo o build
Use o arquivo de configuração de build para iniciar manualmente um build ou para automatizar builds usando acionadores.
Como trabalhar com versões do cliente do Docker
O builder do Docker compatível com o Cloud Build, gcr.io/cloud-builders/docker
usa o Docker 20.10.14. Com essa versão, se você não especificar uma tag ao enviar uma imagem para o Docker, ele enviará apenas a imagem com a tag latest
.
Se a tag latest
não existir, o envio falhará.
Para enviar uma imagem com uma tag específica para o Docker, especifique essa tag na etapa de criação docker push
. O exemplo a seguir envia uma imagem marcada com prod
:
YAML
steps:
...
- name: 'gcr.io/cloud-builders/docker'
args: ['docker', 'push', '$$USERNAME/myrepo:prod']
...
JSON
{
...
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"docker",
"push",
"$$USERNAME/myrepo:prod"
],
}
...
}
Para enviar todas as tags de uma imagem para o Docker, adicione a sinalização -a
à lista de argumentos na
etapa de criação docker push
:
YAML
steps:
...
- name: 'gcr.io/cloud-builders/docker'
args: ['docker', 'push', '-a', '$$USERNAME/myrepo']
...
JSON
{
...
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"docker",
"push",
"-a",
"$$USERNAME/myrepo"
],
}
...
}
Você pode usar o cliente Docker 19.03.9 marcando a versão no builder do Docker:
YAML
steps:
...
- name: 'gcr.io/cloud-builders/docker:19.03.9'
args: ['docker', 'push', '$$USERNAME/myrepo:prod']
...
JSON
{
...
{
"name": "gcr.io/cloud-builders/docker:19.03.9",
"args": [
"docker",
"push",
"$$USERNAME/myrepo:prod"
],
}
...
}
A seguir
- Saiba como escrever um arquivo básico de configuração de build.
- Saiba como gerar versões manualmente ou automatizá-las usando acionadores de versão.