Automatizar a reconstrução da imagem do contêiner para sincronizar as atualizações da imagem de base


Com o Cloud Workstations, você pode criar e usar imagens personalizadas para suas estações de trabalho. Depois que uma imagem personalizada estiver em uso, será útil automatizar uma recriação da imagem personalizada 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 de segurança e os patches 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 seguindo estas etapas:

  1. Crie um repositório do Artifact Registry para armazenar e verificar a 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. Revise 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Prepare o ambiente

Antes de continuar, defina as seguintes variáveis de ambiente.

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

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

    GITHUB_USER=$GITHUB_ID
    
  3. Defina as variáveis PROJECT_NUMBER e REGION para uso durante o 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, 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.

  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 Artifact Analysis, execute o seguinte comando:

    gcloud services disable containerscanning.googleapis.com
    

Configurar seu repositório do GitHub

Na prática, você mantém o Dockerfile das imagens personalizadas em um repositório do Git. O processo automatizado acessa esse repositório durante o processo de build para extrair as configurações e o Dockerfile relevantes.

Bifurcar o repositório de exemplo

Para bifurcar um repositório de exemplo 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 até 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 acionador na última etapa do assistente, e você pode pular as últimas etapas, porque isso pode ser feito mais tarde na linha de comando.

Se você usa uma solução de repositório Git diferente, também pode seguir as instruções para conectar o Cloud Build ao GitLab ou ao Bitbucket.

Criar um gatilho 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ê cria um gatilho do Cloud Build que executa as instruções no arquivo cloudbuild.yaml, que pode ser encontrado 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)")

Este exemplo configura o seguinte:

  • O comando da CLI gcloud cria um gatilho manual no Cloud Build chamado custom-image-trigger, conforme indicado pela flag name na segunda linha.
  • As três linhas seguintes contêm flags relacionadas ao repositório do GitHub de origem:
  • A flag build-config indica o caminho para o arquivo do Cloud Build no repositório do 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 a ser criado, $_IMAGE_DIR

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

  • Depois que o acionador é 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 atualizadas com as atualizações e os patches mais recentes, use o Cloud Scheduler para executar o acionador 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 da sua organização para garantir que as atualizações mais recentes sejam sempre incluídas.

  1. Conceda um papel obrigatório à conta de serviço padrão para invocar o acionador 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 obrigatório à conta de serviço do Cloud Build para fazer upload de imagens no 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 para essa linha.
    3. Clique em Forçar a execução de um job para testar o sistema manualmente.
    4. Depois que o comando for executado, mude para a página do histórico do Cloud Build para analisar o progresso:

      Acesse Histórico do Cloud Build

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:

  1. Abra a página "Repositórios do Artifact Registry":

    Acessar repositórios do Artifact Registry

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

  3. Clique no nome de uma imagem. Os totais de vulnerabilidades de cada resumo de imagem aparecem na coluna Vulnerabilidades.

    Página "Artifact Registry Repositories" que mostra o nome de uma 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 exemplo 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 conta do Google Cloud pelos recursos usados nesta página, não se esqueça 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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

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

A seguir