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


Com o Cloud Workstations, você cria e usa modelos imagens 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 ajudar a garantir incluindo atualizações e patches de segurança nas imagens personalizadas das estações de trabalho.

Objetivos

Ao seguir este tutorial, você cria um pipeline automatizado para sua imagem de base com estas 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. Criar um gatilho do Cloud Build para automatizar a criação e a implantação de imagens personalizadas para o Artifact Registry.
  4. Configurar 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 variáveis de ambiente a seguir.

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

    PROJECT_ID=$PROJECT_ID
    
  2. Defina o nome de usuário do GitHub em que você planeja 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 a Análise de artefatos, 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 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 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 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. 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 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)")

Neste exemplo, configuramos 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 flag 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

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

  • Depois que o gatilho é criado, o nome exclusivo dele é recuperado e armazenados 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. Em prática, defina uma frequência alinhada às suas necessidades organizacionais para ajudar e garantir que as atualizações mais recentes estejam 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 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 more_vertMais opções. linha de comando.
    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

Porque você ativou a API Container Scanning como parte da configuração o Artifact Registry verifica automaticamente as imagens em busca de segurança vulnerabilidades.

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 para cada resumo de imagem aparecem em 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 "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 dos recursos na sua conta do Google Cloud nesta página, lembre-se de excluir os recursos não precisa mais.

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 de estações de trabalho, configurações de estações de trabalho e estações de trabalho, consulte Excluir recursos.

A seguir