Automatizar recriações de imagens de contêiner para sincronizar atualizações da imagem de base


O Cloud Workstations permite criar e usar imagens personalizadas para suas estações de trabalho. Depois que uma imagem personalizada está em uso, é útil automatizar a recriação dela para extrair correções e atualizações disponíveis nas imagens de base.

Neste tutorial, você aprenderá a criar um pipeline automatizado para garantir a inclusão de atualizações de segurança e patches nas imagens personalizadas da estação de trabalho.

Objetivos

Ao seguir este tutorial, você cria um pipeline automatizado para sua imagem de base com as seguintes etapas:

  1. Crie um repositório do Artifact Registry para armazenar e verificar sua imagem personalizada.
  2. Configure o GitHub com o Google Cloud para armazenar as configurações de imagem.
  3. Crie um gatilho do Cloud Build para automatizar a criação e a implantação de imagens personalizadas no Artifact Registry.
  4. Configure o Cloud Scheduler para iniciar builds regularmente.
  5. Analisar os resultados dos processos automatizados.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs Artifact Registry, API Container Scanning, Cloud Build e Cloud Scheduler.

    Ative as APIs

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  8. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  9. Ative as APIs Artifact Registry, API Container Scanning, Cloud Build e Cloud Scheduler.

    Ative as APIs

  10. Instale a CLI do Google Cloud.
  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init

prepare o ambiente

Antes de continuar, defina as variáveis de ambiente a seguir.

  1. Defina o ID do projeto na nuvem que você planeja usar:

    PROJECT_ID=$PROJECT_ID
    
  2. Defina o nome de usuário do GitHub onde você planeja armazenar o repositório:

    GITHUB_USER=$GITHUB_ID
    
  3. Defina as variáveis PROJECT_NUMBER e REGION a serem usadas no processo:

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
        --format='value(projectNumber)')
    
    REGION=$REGION
    

    No exemplo anterior, substitua $REGION pelo nome da região que você planeja usar, como 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.

  1. 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.

  2. Configure o Docker para usar suas credenciais da CLI gcloud ao acessar o Artifact Registry.

    gcloud auth configure-docker $REGION-docker.pkg.dev
    

    Para desativar o Artifact Analysis, execute o seguinte comando:

    gcloud services disable containerscanning.googleapis.com
    

Configurar o 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 compilação para extrair as configurações e o Dockerfile relevantes.

Bifurcar o repositório de amostra

Para bifurcar um repositório de amostra que fornece definições de contêiner, siga estas etapas:

  1. Clique neste link para Criar uma nova bifurcação do repositório software-delivery-workshop.
  2. Se solicitado, faça login no GitHub.
  3. Selecione seu nome de usuário do GitHub como Proprietário. O nome do repositório aparece como software-delivery-workshop.
  4. Clique em Criar bifurcação e aguarde alguns segundos para que o processo seja concluído.

Conectar o Cloud Build ao GitHub

Em seguida, conecte esse repositório ao Cloud Build usando o recurso de conexão integrado do GitHub. 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 Bitbucket.

Criar um gatilho do Cloud Build

O repositório de amostra contém uma definição de contêiner e uma configuração do Cloud Build usadas para criar a imagem do contêiner. Nesta etapa, você cria um gatilho do Cloud Build que executa as instruções no arquivo cloudbuild.yaml, que está disponível na pasta 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)")

Neste exemplo, temos as seguintes configurações:

  • O comando gcloud da CLI cria um acionador manual no Cloud Build chamado custom-image-trigger, conforme indicado pela sinalização name na segunda linha.
  • As três linhas a seguir contêm sinalizações relacionadas ao repositório do GitHub de origem:
  • A sinalização build-config indica o caminho para o arquivo do Cloud Build no repositório Git.
  • Para tornar o job dinâmico, use a sinalização 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 a ser criado, $_IMAGE_DIR

    Acesse o arquivo cloudbuild.yaml para ver como essas variáveis são usadas no processo.

  • Depois que o gatilho é criado, o nome exclusivo dele é recuperado e armazenado na variável de ambiente $TRIGGER_ID para uso posterior.

Configurar o Cloud Scheduler

Para garantir que suas imagens estejam com as atualizações e os patches mais recentes, use o Cloud Scheduler para executar o gatilho do Cloud Build em uma frequência definida. Neste tutorial, o job é executado todos os dias. Na prática, defina uma frequência alinhada às necessidades organizacionais para garantir que as atualizações mais recentes sejam sempre incluídas.

  1. Conceda um papel necessário à conta de serviço padrão para invocar o gatilho do Cloud Build:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/cloudbuild.builds.editor"
    
  2. 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"
    
  3. 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-platform
    
  4. O job está configurado para ser executado uma vez por dia. No entanto, para testar o recurso imediatamente, execute o job manualmente no Cloud Scheduler:

    Acessar o Cloud Scheduler

    1. Na página do Cloud Scheduler, encontre a entrada que você acabou de criar chamada run-build.
    2. Na coluna "Ações", clique no menu de opções more_vertMais dessa linha.
    3. Clique em Forçar a execução de um job para testar o sistema manualmente.
    4. Depois que o comando for executado com êxito, mude para a página de histórico do Cloud Build para analisar o progresso:

      Acessar o histórico do Cloud Build

Revisar 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:

  1. Abra a página de repositórios do Artifact Registry:

    Acesse os repositórios do Artifact Registry

  2. Na lista de repositórios, clique em um deles.

  3. Clique no nome de uma imagem. O total de vulnerabilidades de cada resumo de imagem aparece na coluna Vulnerabilidades.

    Página de repositórios do Artifact Registry que mostra um nome de imagem de amostra

  4. Para ver a lista de vulnerabilidades de uma imagem, clique no link na coluna Vulnerabilidades. A lista de vulnerabilidades mostra a gravidade, se há alguma correção disponível e o nome do pacote que contém a vulnerabilidade.

    Página de vulnerabilidades do Artifact Registry que mostra uma lista de exemplos de vulnerabilidades

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta página, lembre-se de excluir os recursos que não são mais necessários.

Para excluir um projeto do Google Cloud no console do Google Cloud ou na CLI gcloud:

Console

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

gcloud

    Exclua um projeto do Google Cloud:

    gcloud projects delete PROJECT_ID

Para mais informações sobre como excluir outros recursos, como clusters, configurações e estações de trabalho, consulte Excluir recursos.

A seguir