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


Com o Cloud Workstations, você cria e usa modelos imagens para suas estações de trabalho. Depois que uma imagem personalizada está em uso, é útil automatizar uma recriação dela imagem para extrair correções e atualizações disponíveis nas imagens 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. 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. 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. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  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. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  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 as credenciais da CLI gcloud ao 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 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.

Bifurcar o repositório de amostra

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

  1. Clique neste link para Crie 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 o proprietário. O nome do repositório aparece como software-delivery-workshop.
  4. Clique em Create fork 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. Você não precisa crie o gatilho na última etapa do assistente e pule a última etapa porque você pode fazer isso depois na linha de comando.

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

Criar um gatilho do Cloud Build

O repositório de exemplo contém uma definição de contêiner e um Cloud Build configuração 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 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 este 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 diariamente. 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. Conceder um papel necessário à conta de serviço do Cloud Build para fazer upload 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 recurso imediatamente, execute o trabalho manualmente no O 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 Force a job run 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 de 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 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 "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 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 usando o console ou a 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, configurações e estações de trabalho, consulte Excluir recursos.

A seguir