O Cloud Workstations permite criar e usar imagens personalizadas para suas estações de trabalho. Depois que uma imagem personalizada estiver em uso, é útil automatizar uma recriação dela para extrair correções e atualizações disponíveis nas imagens de base.
Neste tutorial, você vai aprender a criar um pipeline automatizado para garantir que as atualizações e patches de segurança sejam incluídos nas imagens personalizadas da estação de trabalho.
Objetivos
Ao seguir este tutorial, você vai criar um pipeline automatizado para sua imagem de base com estas etapas:
- Crie um repositório do Artifact Registry para armazenar e verificar sua imagem personalizada.
- Configure o GitHub com Google Cloud para armazenar as configurações de imagem.
- Crie um gatilho de build do Cloud Build para automatizar a criação e a implantação de imagens personalizadas no Artifact Registry.
- Configure o Cloud Scheduler para iniciar builds regularmente.
- Analise os resultados dos processos automatizados.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo com base na projeção de uso,
use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Para mais informações, consulte Limpeza.
Antes de começar
- Faça login na conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the
gcloudCLI with your federated identity. -
To initialize the
gcloudCLI, run the following command:gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the
gcloudCLI with your federated identity. -
To initialize the
gcloudCLI, run the following command:gcloud init
Prepare o ambiente
Antes de continuar, defina as seguintes variáveis de ambiente.
Defina o ID do projeto na nuvem que você planeja usar:
PROJECT_ID=$PROJECT_IDDefina o nome de usuário do GitHub em que você planeja armazenar o repositório:
GITHUB_USER=$GITHUB_IDDefina as variáveis
PROJECT_NUMBEReREGIONpara usar durante o processo:PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \ --format='value(projectNumber)') REGION=$REGIONNo exemplo anterior, substitua $REGION pelo nome da região que você planeja usar, por exemplo,
us-central1.Para mais informações sobre as regiões disponíveis, consulte Locais do Cloud Workstations.
Crie um repositório do Artifact Registry
Neste tutorial, você vai usar o Artifact Registry para armazenar e verificar suas imagens.
Crie um repositório com o seguinte comando:
gcloud artifacts repositories create custom-images \ --repository-format=docker \ --location=$REGION \ --description="Docker repository"Substitua $REGION pelo nome da região que você planeja usar.
Configure o Docker para usar suas credenciais da CLI
gcloudao acessar o Artifact Registry.gcloud auth configure-docker $REGION-docker.pkg.devPara desativar o Artifact Analysis, execute o seguinte comando:
gcloud services disable containerscanning.googleapis.com
Configure seu repositório do GitHub
Na prática, você mantém o Dockerfile das imagens personalizadas em um repositório Git. O processo automatizado acessa esse repositório durante o processo de build para extrair as configurações e o Dockerfile relevantes.
Bifurque o repositório de exemplo
Para bifurcar um repositório de exemplo que fornece definições de contêiner, siga estas etapas:
- Clique neste link para
criar uma nova bifurcação.
do repositório
software-delivery-workshop. - Se solicitado, faça login no GitHub.
- Selecione seu nome de usuário do GitHub como proprietário. O nome do repositório aparece como
software-delivery-workshop. - Clique em Criar bifurcação e aguarde alguns segundos até que o processo seja concluído.
Conecte o Cloud Build ao GitHub
Em seguida, conecte esse repositório ao Cloud Build usando o recurso de conexão do GitHub integrado. Clique no link para o repositório do GitHub e siga as instruções que descrevem como concluir o processo. Não é necessário criar o gatilho na última etapa do assistente, e você pode pular as últimas etapas porque é possível fazer isso mais tarde na linha de comando.
Se você usar uma solução de repositório Git diferente, também poderá seguir as instruções para conectar o Cloud Build ao GitLab ou ao Bitbucket.
Crie um gatilho de build do Cloud Build
O repositório de exemplo contém uma definição de contêiner e uma configuração do Cloud Build usada para criar a imagem do contêiner. Nesta etapa, você vai criar um
gatilho de build do Cloud Build que executa as instruções no
cloudbuild.yaml arquivo encontrado na
labs/cloudbuild-scheduled-jobs/code-oss-java
labs/cloudbuild-scheduled-jobs/code-oss-java.
gcloud builds triggers create manual \
--name=custom-image-trigger \
--repo=$GITHUB_USER/software-delivery-workshop \
--repo-type=GITHUB \
--branch=main \
--build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
--substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java
TRIGGER_ID=$(gcloud builds triggers list \
--filter=name="custom-image-trigger" --format="value(id)")
Este exemplo configura o seguinte:
- O comando da CLI
gcloudcria um gatilho manual no Cloud Build chamadocustom-image-trigger, conforme indicado por a flagnamena segunda linha. - As três linhas seguintes contêm flags relacionadas ao repositório de origem do GitHub:
- Caminho para o repositório
- Tipo de repositório
- Ramificação do Git para criar
- A flag
build-configindica o caminho para o arquivo do Cloud Build no repositório Git. Para tornar o job dinâmico, use a flag
substitutions. Para esse job, o comando transmite as seguintes variáveis:- Região,
$_REGION - Nome do repositório do Artifact Registry,
$_AR_REPO_NAME - Nome da imagem do contêiner,
$_AR_IMAGE_NAME - Local do Dockerfile para criar,
$_IMAGE_DIR
Consulte o cloudbuild.yaml arquivo para saber como essas variáveis são usadas no processo.
- Região,
Depois que o gatilho é criado, o nome exclusivo dele é recuperado e armazenado na variável de ambiente
$TRIGGER_IDpara uso posterior.
Configurar o Cloud Scheduler
Para garantir que suas imagens estejam atualizadas com as atualizações e patches mais recentes, use o Cloud Scheduler para executar o gatilho do Cloud Build em uma frequência definida. Para este tutorial, o job é executado todos os dias. Na prática, defina isso para uma frequência alinhada às necessidades da sua organização para garantir que as atualizações mais recentes sejam sempre incluídas.
Conceda um papel necessário à conta de serviço padrão para invocar o gatilho de build do Cloud Build:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/cloudbuild.builds.editor"Conceda um papel necessário à conta de serviço do Cloud Build para fazer upload de imagens para o Artifact Registry:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role="roles/artifactregistry.admin"Crie o job do Cloud Scheduler com o seguinte comando:
gcloud scheduler jobs create http run-build \ --schedule='0 1 * * *' \ --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \ --location=us-central1 \ --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --oauth-token-scope=https://www.googleapis.com/auth/cloud-platformO job está definido para ser executado uma vez por dia. No entanto, para testar o recurso imediatamente, execute o job manualmente no Cloud Scheduler:
- Na página do Cloud Scheduler, encontre a entrada que você acabou de criar chamada run-build.
- Na coluna Ações, clique no menu "opções" more_vertMais para essa linha.
- Clique em Forçar a execução de um job para testar o sistema manualmente.
Depois que o comando for executado, acesse a página de histórico do Cloud Build para analisar o progresso:
Analisar os resultados
Como você ativou a API Container Scanning como parte do processo de configuração, o Artifact Registry verifica automaticamente as imagens em busca de vulnerabilidades de segurança.
Para analisar as vulnerabilidades:
Abra a página Repositórios do Artifact Registry:
Na lista de repositórios, clique em um repositório.
Clique em um nome de imagem. Os totais de vulnerabilidade de cada resumo de imagem aparecem na coluna Vulnerabilidades.

Para ver a lista de vulnerabilidades de uma imagem, clique no link na coluna Vulnerabilidades. A lista de vulnerabilidades mostra a gravidade, disponibilidade de uma correção e o nome do pacote que contém a vulnerabilidade.

Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Para evitar cobranças na Google Cloud conta do pelos recursos usados nesta página, exclua os recursos que não são mais necessários.
Para excluir um Google Cloud projeto do Google Cloud console ou da
gcloud CLI:
Console
- No Google Cloud console, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
gcloud
Excluir um Google Cloud projeto do:
gcloud projects delete PROJECT_ID
A seguir
- Confira a lista de imagens de base pré-configuradas disponíveis.
- Personalize as imagens de contêiner.
- Confira os tipos de máquinas disponíveis.
- Configure as práticas recomendadas de segurança.
- Confira arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.