Configurar a personalização do código do Gemini Code Assist

Este documento descreve como configurar a personalização de código do Gemini Code Assist conectando-o aos seus repositórios de código privados. Este recurso permite que você receba recomendações de código, extraídas das bibliotecas internas, APIs privadas e do estilo de codificação da sua organização.

Antes de começar

Escolha quais repositórios privados estão conectados

Como prática recomendada, certifique-se de conectar repositórios que:

  • Tenha um código com estilo ou estrutura semelhante ao que você quer que seus desenvolvedores escrevam.
  • Tenha bibliotecas privadas ou APIs que você gostaria de chamar da sua base de código atual.

(Opcional) Escolha quais arquivos não serão indexados

Por padrão, a personalização do código indexa todos os arquivos de código suportados nos repositórios especificados.

Para evitar a exposição de código que você não deseja indexar, você pode usar padrões de ramificação para controlar o acesso ao seu índice e usar uma ramificação estável, como main .

Como alternativa, você também pode excluir arquivos do índice criando um arquivo .aiexclude .

Criar um índice

A personalização do código depende de um índice para analisar e analisar seu repositório para sugestões e pesquisas de geração de código mais rápidas.

gcloud CLI

Para criar o índice, em um ambiente de shell, use o gemini code-repository-indexes create :

gcloud gemini code-repository-indexes create INDEX_NAME \
    --project=PROJECT_ID \
    --location=REGION

Terraform

resource "google_gemini_code_repository_index" "example" {
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
}

Substitua o seguinte:

  • INDEX_NAME : o nome do seu índice. Importante : Anote o nome do seu índice. Você precisará dele para várias etapas deste documento.
  • PROJECT_ID : seu Google Cloud ID do projeto.
  • REGION : uma região com suporte, conforme declarado na seção Antes de começar desta página, que você configurou no Developer Connect em seu Google Cloudprojeto.

A criação do índice geralmente leva 30 minutos para ser concluída, mas pode levar até uma hora.

O Google limita o número de índices de repositório de código a um para cada projeto e organização.

Controle o acesso ao seu índice usando grupos de repositórios

Um grupo de repositórios é um contêiner para configuração de indexação, que inclui repositórios e seus padrões de ramificação. Os grupos de repositórios são projetados para controle granular do IAM, dando aos desenvolvedores acesso aos dados indexados desses grupos, onde eles têm a permissão cloudaicompanion.repositoryGroups.use .

Os grupos de repositórios contêm repositórios do Developer Connect, ou links, do mesmo projeto e local.

Os administradores executam as seguintes ações:

  • Criar recurso de índice de repositório de código.
  • No mesmo projeto e local, configure uma nova conexão do Developer Connect.
  • Vincule repositórios Git na conexão.
  • Obtenha os nomes dos recursos dos links, escolha o padrão de ramificação para indexar cada link e coloque-o em um ou vários grupos de repositórios.

gcloud CLI

Para criar um grupo de repositórios, em um ambiente de shell, use o comando gemini code-repository-indexes repository-groups create :

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "BRANCH_NAMES"}]'

Terraform

resource "google_gemini_repository_group" "example" {
  location = "REGION"
  code_repository_index = "INDEX_NAME"
  repository_group_id = "REPOSITORY_GROUP"
  repositories {
    resource = "REPOSITORY_RESOURCE_NAME"
    branch_pattern = "BRANCH_NAMES"
  }
}

Substitua o seguinte:

  • REPOSITORY_GROUP : nome do grupo de repositórios, como default .
  • PROJECT_ID : seu Google Cloud ID do projeto.
  • REGION : uma região com suporte, conforme indicado na seção Antes de começar desta página, que você configurou no Developer Connect em seu Google Cloudprojeto.
  • INDEX_NAME : nome do índice que você criou em uma etapa anterior para criar um índice .
  • REPOSITORY_RESOURCE_NAME : nome do repositório dentro da conexão do Developer Connect. Para encontrar o nome do repositório, acesse a página do Developer Connect no Google Cloud console e, na aba Repositórios , procure o ID da conexão na coluna Conexão da tabela. Para copiar o nome do recurso, clique no menu more_vert para mais opções e selecione Copiar caminho do recurso .
  • BRANCH_NAMES : nome dos branches que você deseja indexar, como main|dev .

Você também pode criar um grupo de repositórios com repositórios definidos em um arquivo JSON (ou YAML), formatado da seguinte maneira:

JSON

[
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "main|dev"
  },
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "dev"
  }
]

YAML

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: main|dev

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: dev

Para criar um grupo de repositórios com base em um arquivo JSON ou YAML, em um ambiente de shell, use o comando gemini code-repository-indexes repository-groups create :

JSON

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.json

YAML

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.yaml

Se preferir, você pode criptografar e controlar seus dados com uma chave de criptografia gerenciada pelo cliente (CMEK) por meio do Cloud Key Management Service . Para saber mais sobre como usar uma CMEK, consulte Criptografar dados com chaves de criptografia gerenciadas pelo cliente .

Conceder função IAM ao grupo de repositórios em um projeto

Você só recebe sugestões de repositórios no índice. Cada repositório pertence a um ou mais grupos de repositórios. Para acessar sugestões, você precisa conceder a função de usuário do IAM "Grupos de Repositórios do Cloud AI Companion" ( roles/cloudaicompanion.repositoryGroupsUser ) — que contém a permissão de usuário do IAM " cloudaicompanion.repositoryGroups.user " — ao grupo de repositórios de uma das seguintes maneiras:

  • Conceda aos diretores permissão para acessar o índice inteiro.
  • Conceda aos principais acesso a um subconjunto do índice.

Conceder aos diretores permissão para acessar todo o índice

  1. Para vincular uma política do IAM a um projeto, em um ambiente de shell, use o comando projects add-iam-policy-binding :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member='PRINCIPAL' \
        --role='roles/cloudaicompanion.repositoryGroupsUser'
    

    Substitua o seguinte:

    • PROJECT_ID : o ID do projeto onde o grupo de repositórios está localizado.
    • PRINCIPAL : o endereço de e-mail do principal que precisa de acesso — por exemplo, user:test-user@gmail.com para um indivíduo ou group:admins@example.com para um grupo.

    Para obter mais informações, consulte gcloud projects set-iam-policy .

  2. Quando solicitado a especificar uma condição, digite None .

Conceder aos principais acesso a um subconjunto do índice

Você pode criar vários grupos de repositórios e atribuir funções do IAM a diferentes entidades principais do IAM.

gcloud CLI

Para configurar uma política do IAM, você deve preparar o arquivo JSON ou YAML da política do IAM, que conterá uma lista de grupos do IAM e funções atribuídas. Por exemplo:

bindings:
- members:
  - group:my-group@example.com
  - user:test-user@example.com
  role: roles/cloudaicompanion.repositoryGroupsUser

Para obter detalhes e sintaxe adicionais, consulte Noções básicas sobre políticas de permissão .

Para definir a política do IAM, em um ambiente de shell, use o comando gemini code-repository-indexes repository-groups set-iam-policy :

gcloud gemini code-repository-indexes repository-groups set-iam-policy GROUP_NAMEPOLICY_FILE \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME

Substitua o seguinte:

Terraform

data "google_iam_policy" "foo" {
  binding {
    role = "roles/cloudaicompanion.repositoryGroupsUser"
    members = ["test-user@example.com"]
  }
}

resource "google_gemini_repository_group_iam_policy" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  policy_data = data.google_iam_policy.foo.policy_data
}

data "google_gemini_repository_group_iam_policy" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  depends_on = [
    google_gemini_repository_group_iam_policy.foo
  ]
}

Você também pode criar uma ligação:

resource "google_gemini_repository_group_iam_binding" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  role = "roles/cloudaicompanion.repositoryGroupsUser"
  members = ["test-user@example.com"]
}

Substitua o seguinte:

Verificar status de indexação

Dependendo do número de repositórios que você deseja indexar e do tamanho deles, a indexação do conteúdo pode levar até 24 horas. Para repositórios grandes, a indexação pode levar mais tempo. A indexação ocorre uma vez a cada 24 horas, coletando todas as alterações feitas no repositório.

  1. Pesquise os logs indexing . Para obter mais informações, consulte Linguagem de consulta de log .

    Console

    1. No Google Cloud console, vá para o Logs Explorer .

      Vá para o Logs Explorer

    2. Use o filtro de nomes de log para visualizar logs indexing .

    gcloud CLI

    Para pesquisar os logs de indexação, em um ambiente de shell, use o comando logging read :

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing""
    

    Substitua PROJECT_ID pelo ID do projeto onde o grupo de repositórios está localizado.

    Por exemplo, para visualizar erros nos logs indexing , execute o seguinte comando:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. Revise os status de indexação associados, como os seguintes:

    • Início da indexação do repositório — por exemplo, Indexing repository REPOSITORY_NAME . Total number of repositories: 10, succeeded: 6, failed: 0.
    • Fim da indexação de repositórios individuais - por exemplo:
      • Sucesso: Successfully finished indexing repository REPOSITORY_NAME . Total number of repositories: 10, succeeded: 7, failed: 0.
      • Falha: Failed to index repository REPOSITORY_NAME . Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Fim da indexação do repositório - por exemplo:
      • Sucesso: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Falha: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 1. Repositories that were not successfully fetched will be retried in the next run.

    Nos status do índice, REPOSITORY_NAME é o repositório que você deseja revisar.

  3. Revise os erros de indexação associados, como os seguintes:

    • Falha ao buscar o repositório.
    • Falha ao listar os arquivos do repositório.
    • Falha ao recuperar informações do repositório do índice.
    • Falha ao recuperar arquivos do índice.
    • Erro interno.

Use a personalização do código

Depois de configurar a personalização do código, você começará a ver sugestões de conclusão e geração de código que podem ser baseadas no código privado que você indexou, além dos resultados do reconhecimento completo da base de código.

Para saber mais sobre o uso da personalização de código e práticas recomendadas, consulte Usar personalização de código .

Desativar personalização de código

  1. Para listar todos os grupos de repositórios para o índice atual, em um ambiente de shell, use o comando gemini code-repository-indexes repository-groups list :

    gcloud gemini code-repository-indexes repository-groups list --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME --uri
    

    Substitua o seguinte:

    • REGION : uma região com suporte, conforme declarado na seção Antes de começar desta página, que você configurou no Developer Connect em seuGoogle Cloud projeto.
    • PROJECT_ID : seu Google Cloud ID do projeto.
    • INDEX_NAME : nome do índice que você criou em uma etapa anterior para criar um índice .
  2. Para excluir um grupo de repositórios do índice atual, use o comando gemini code-repository-indexes repository-groups delete :

    gcloud gemini code-repository-indexes repository-groups delete REPOSITORY_GROUP \
        --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME
    
  3. Repita a etapa 3 para cada grupo de repositórios até excluir todos os grupos de repositórios do índice.

  4. Opcional: Para excluir o índice, em um ambiente de shell, use o comando gemini code-repository-indexes delete :

    gcloud gemini code-repository-indexes delete INDEX_NAME \
        --location=REGION \
        --project=PROJECT_ID
    

O que vem a seguir