Automatize as recompilações de imagens de contentores para sincronizar as atualizações de imagens base


As estações de trabalho na nuvem permitem-lhe criar e usar imagens personalizadas para as suas estações de trabalho. Depois de uma imagem personalizada estar em utilização, é útil automatizar uma recompilação da imagem personalizada para incorporar correções e atualizações disponíveis nas imagens base.

Neste tutorial, vai aprender a criar um pipeline automatizado para ajudar a garantir que inclui atualizações e patches de segurança nas suas imagens de estações de trabalho personalizadas.

Objetivos

Ao seguir este tutorial, cria um pipeline automatizado para a sua imagem base com estes passos:

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

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

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. Verify 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. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI com a sua identidade federada.gcloud

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

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

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI com a sua identidade federada.gcloud

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  14. Prepare o ambiente

    Antes de continuar, certifique-se de que define as seguintes variáveis de ambiente.

    1. Defina o ID do projeto do projeto na nuvem que planeia usar:

      PROJECT_ID=$PROJECT_ID
      
    2. Defina o nome de utilizador do GitHub onde planeia armazenar o seu repositório:

      GITHUB_USER=$GITHUB_ID
      
    3. Defina as variáveis PROJECT_NUMBER e REGION a usar 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 planeia usar, por exemplo, us-central1.

      Para mais informações sobre as regiões disponíveis, consulte o artigo Localizações das Cloud Workstations.

    Crie um repositório do Artifact Registry

    Neste tutorial, usa o Artifact Registry para armazenar e analisar as 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 planeia usar.

    2. Configure o Docker para usar as suas credenciais da CLI do gcloud quando aceder ao Artifact Registry.

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

      Para desativar a análise de artefactos, execute o seguinte comando:

      gcloud services disable containerscanning.googleapis.com
      

    Configure o seu repositório do GitHub

    Na prática, mantém o Dockerfile das suas imagens personalizadas num repositório Git. O processo automatizado acede a esse repositório durante o processo de criação para extrair as configurações relevantes e o Dockerfile.

    Crie um fork do repositório de exemplo

    Para criar uma ramificação de um repositório de exemplo que forneça definições de contentores, siga estes passos:

    1. Clique neste link para criar um novo fork do repositório software-delivery-workshop.
    2. Se lhe for pedido, inicie sessão no GitHub.
    3. Selecione o seu nome de utilizador do GitHub como proprietário. O nome do repositório é apresentado como software-delivery-workshop.
    4. Clique em Criar fork e aguarde alguns segundos até que o processo esteja concluído.

    Associe o Cloud Build ao GitHub

    Em seguida, associe esse repositório ao Cloud Build através da capacidade de associação ao GitHub integrada. Clique no link para o repositório do GitHub e siga as instruções que descrevem como concluir o processo. Não precisa de criar o acionador no último passo do assistente e pode ignorar os últimos passos porque pode fazê-lo mais tarde a partir da linha de comandos.

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

    Crie um acionador do Cloud Build

    O repositório de exemplo contém uma definição de contentor e uma configuração do Cloud Build usadas para criar a imagem de contentor. Neste passo, cria um acionador do Cloud Build que executa as instruções no ficheiro cloudbuild.yaml que pode encontrar 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 gcloud CLI cria um acionador manual no Cloud Build denominado custom-image-trigger, conforme indicado pelo sinalizador name na segunda linha.
    • As três linhas seguintes contêm flags relacionadas com o repositório do GitHub de origem:
    • A flag build-config indica o caminho para o ficheiro do Cloud Build no repositório Git.
    • Para tornar a tarefa dinâmica, use a flag substitutions. Para esta tarefa, o comando transmite as seguintes variáveis:

      • Região, $_REGION
      • Nome do repositório do Artifact Registry, $_AR_REPO_NAME
      • Nome da imagem do contentor, $_AR_IMAGE_NAME
      • Localização do ficheiro Docker para compilar, $_IMAGE_DIR

      Veja o ficheiro cloudbuild.yaml para ver como estas variáveis são usadas no processo.

    • Após a criação do acionador, o nome exclusivo do acionador é obtido e armazenado na variável de ambiente $TRIGGER_ID para utilização posterior.

    Configure o Cloud Scheduler

    Para ajudar a garantir que as suas imagens estão atualizadas com as atualizações e os patches mais recentes, use o Cloud Scheduler para executar o acionador do Cloud Build numa frequência definida. Para este tutorial, a tarefa é executada todos os dias. Na prática, defina esta opção para uma frequência alinhada com as necessidades da sua organização para ajudar a garantir que as atualizações mais recentes são sempre incluídas.

    1. Conceda uma função necessária à conta de serviço predefinida 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 uma função necessária à conta de serviço do Cloud Build para carregar 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 a tarefa 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. A tarefa está definida para ser executada uma vez por dia. No entanto, para testar a funcionalidade imediatamente, execute a tarefa manualmente a partir do Cloud Scheduler:

      Aceda ao Cloud Scheduler

      1. Na página do Cloud Scheduler, encontre a entrada que acabou de criar denominada 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 uma tarefa para testar o sistema manualmente.
      4. Depois de o comando ser executado com êxito, mude para a página Histórico do Cloud Build para rever o progresso:

        Aceda ao histórico do Cloud Build

    Reveja os resultados

    Uma vez que ativou a API Container Scanning como parte do processo de configuração, o Artifact Registry analisa automaticamente as imagens em busca de vulnerabilidades de segurança.

    Para rever as vulnerabilidades:

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

      Aceda aos repositórios do Artifact Registry

    2. Na lista de repositórios, clique num repositório.

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

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

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

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

    Limpar

    Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

    Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, certifique-se de que se lembra de eliminar os recursos de que já não precisa.

    Para eliminar um Google Cloud projeto da Google Cloud consola ou da CLIgcloud:

    Consola

    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

    • In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

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

    Para mais informações sobre como eliminar outros recursos, como clusters de estações de trabalho, configurações de estações de trabalho e estações de trabalho, consulte o artigo Eliminar recursos.

    O que se segue?