Configurer et utiliser la personnalisation du code Gemini Code Assist

Ce document explique comment configurer la personnalisation du code Gemini Code Assist en connectant Gemini Code Assist à vos dépôts de code privés. Cette fonctionnalité vous permet de recevoir des recommandations de code, qui s'appuient sur les bibliothèques internes, les API privées et le style de codage de votre organisation.

Avant de commencer

Choisir les dépôts privés à connecter

Nous vous recommandons de connecter les dépôts suivants:

  • Le code doit avoir un style ou une structure semblable à celui que vous souhaitez que vos développeurs écrivent.
  • Vous disposez de bibliothèques ou d'API privées que vous souhaitez appeler à partir de votre base de code actuelle.

(Facultatif) Choisir les fichiers qui ne sont pas indexés

Par défaut, la personnalisation du code indexe tous les fichiers de code compatibles dans les dépôts que vous avez spécifiés.

Dans de nombreux cas, vous pouvez avoir des fichiers ou des sous-arbres spécifiques que vous ne souhaitez pas indexer. Exemple :

  • Informations très sensibles dont l'accès est limité au sein de votre organisation
  • Code ancien ou obsolète
  • Code généré automatiquement ou temporaire

Pour éviter l'exposition de code que vous ne souhaitez pas indexer, vous pouvez utiliser des modèles de branche pour contrôler l'accès à votre index et utiliser une branche stable, telle que main.

Vous pouvez également exclure des fichiers de l'index en créant un fichier .aiexclude.

Créer un index

La personnalisation du code s'appuie sur un indice pour analyser et analyser votre dépôt afin d'obtenir des suggestions et des recherches de génération de code plus rapides.

Pour créer l'index, dans un environnement shell, utilisez la commande gemini code-repository-indexes create:

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

Remplacez les éléments suivants :

  • INDEX_NAME: nom de votre index. Important: Notez le nom de votre index. Vous en aurez besoin à plusieurs étapes de ce document.
  • PROJECT_ID : ID de votre projet Google Cloud.
  • REGION: région compatible, comme indiqué dans la section Avant de commencer de cette page, que vous avez configurée dans Developer Connect dans votre projet Google Cloud.

La création d'index prend généralement 30 minutes, mais peut durer jusqu'à une heure.

Google limite le nombre d'indices de dépôt de code à un par projet et par organisation.

Contrôler l'accès à votre index à l'aide de groupes de dépôts

Un groupe de dépôts est un conteneur de configuration d'indexation, qui inclut les dépôts et leurs modèles de branches. Les groupes de dépôts sont conçus pour un contrôle IAM précis, ce qui permet aux développeurs d'accéder aux données indexées de ces groupes, pour lesquels ils disposent de l'autorisation cloudaicompanion.repositoryGroups.use.

Les groupes de dépôts contiennent des dépôts ou des liens Developer Connect du même projet et de la même zone géographique.

Les administrateurs effectuent les actions suivantes:

  • Créez une ressource d'index de dépôt de code.
  • Dans le même projet et au même emplacement, configurez une nouvelle connexion Developer Connect.
  • Associez des dépôts Git dans la connexion.
  • Obtenez les noms de ressources des liens, choisissez le modèle de branche à indexer pour chaque lien et attribuez-le à un ou plusieurs groupes de dépôts.

Pour créer un groupe de dépôts dans un environnement shell, utilisez la commande 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"}]'

Remplacez les éléments suivants :

  • REPOSITORY_GROUP: nom du groupe de dépôts, par exemple default.
  • PROJECT_ID : ID de votre projet Google Cloud.
  • REGION: région compatible, comme indiqué dans la section Avant de commencer de cette page, que vous avez configurée dans Developer Connect dans votre projet Google Cloud.
  • INDEX_NAME: nom de l'index que vous avez créé à l'étape précédente pour créer un index.
  • REPOSITORY_RESOURCE_NAME: nom du dépôt dans la connexion Developer Connect. Pour trouver le nom du dépôt, accédez à la page Developer Connect (Developer Connect) dans la console Google Cloud, puis dans l'onglet Repositories (Dépôts), recherchez l'ID de connexion sous la colonne Connection (Connexion) du tableau. Pour copier le nom de la ressource, cliquez sur le menu more_vert pour afficher d'autres options, puis sélectionnez Copier le chemin d'accès de la ressource.
  • BRANCH_NAMES: nom des branches que vous souhaitez indexer, par exemple main|dev.

Vous pouvez également créer un groupe de dépôts avec des dépôts définis dans un fichier JSON (ou YAML), au format suivant:

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

Pour créer un groupe de dépôts basé sur un fichier JSON ou YAML, dans un environnement shell, utilisez la commande 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

Attribuer un rôle IAM au groupe de dépôt d'un projet

Vous ne recevez que des suggestions provenant des dépôts de l'index. Chaque dépôt appartient à un ou plusieurs groupes de dépôts. Pour accéder aux suggestions, vous devez attribuer le rôle IAM "Utilisateur des groupes de dépôts Cloud AI Companion" (roles/cloudaicompanion.repositoryGroupsUser), qui contient l'autorisation IAM cloudaicompanion.repositoryGroups.user requise, au groupe de dépôts de l'une des manières suivantes:

  • Accordez aux principaux l'autorisation d'accéder à l'intégralité de l'index.
  • Accordez aux comptes principaux l'accès à un sous-ensemble de l'index.

Accorder aux principaux l'autorisation d'accéder à l'ensemble de l'index

  1. Pour lier une stratégie IAM à un projet dans un environnement shell, utilisez la commande projects add-iam-policy-binding:

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

    Remplacez les éléments suivants :

    • PROJECT_ID: ID du projet dans lequel se trouve le groupe de dépôts.
    • PRINCIPAL: adresse e-mail du principal ayant besoin d'un accès (par exemple, user:test-user@gmail.com pour une personne ou group:admins@example.com pour un groupe).

    Pour en savoir plus, consultez les sections sur gcloud projects set-iam-policy

  2. Lorsque vous êtes invité à spécifier une condition, saisissez None.

Accorder aux comptes principaux l'accès à un sous-ensemble de l'index

Vous pouvez créer plusieurs groupes de dépôts et attribuer des rôles IAM à différents principaux IAM.

Pour configurer une stratégie IAM, vous devez préparer le fichier JSON ou YAML de la stratégie IAM, qui contiendra une liste des groupes IAM et des rôles attribués. Exemple :

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

Pour en savoir plus sur la syntaxe, consultez la section Comprendre les stratégies d'autorisation.

Pour définir la stratégie IAM dans un environnement shell, utilisez la commande 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

Remplacez les éléments suivants :

Vérifier l'état de l'indexation

Selon le nombre de dépôts que vous souhaitez indexer et leur taille, l'indexation des contenus peut prendre jusqu'à 24 heures. Pour les dépôts volumineux, l'indexation peut prendre plus de temps. L'indexation a lieu une fois toutes les 24 heures, et détecte toutes les modifications apportées au dépôt.

  1. Recherchez les journaux indexing. Pour en savoir plus, consultez la page Langage de requête Logging.

    Console

    1. Dans la console Google Cloud, accédez à l'explorateur de journaux.

      Accéder à l'explorateur de journaux

    2. Utilisez le filtre "Noms de journaux" pour afficher les journaux indexing.

    gcloud

    Pour rechercher les journaux d'indexation, dans un environnement shell, utilisez la commande logging read:

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

    Remplacez PROJECT_ID par l'ID du projet dans lequel se trouve le groupe de dépôts.

    Par exemple, pour afficher les erreurs dans les journaux indexing, exécutez la commande suivante:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. Examinez les états d'indexation associés, par exemple:

    • Début de l'indexation du dépôt (par exemple, Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.)
    • Fin de l'indexation de chaque dépôt (par exemple) :
      • Opération réussie : Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • Échec: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Fin de l'indexation du dépôt (par exemple) :
      • Opération réussie : Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Échec: 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.

    Dans les états de l'index, REPOSITORY_NAME correspond au dépôt que vous souhaitez examiner.

  3. Examinez les erreurs d'indexation associées, par exemple:

    • Échec de la récupération du dépôt.
    • Échec de la création de la liste des fichiers du dépôt.
    • Échec de la récupération des informations du dépôt à partir de l'index.
    • Échec de la récupération des fichiers à partir de l'index.
    • Erreur interne.

Utiliser la personnalisation du code

Une fois la personnalisation du code configurée, les utilisateurs commenceront à voir des suggestions de complétion et de génération de code qui peuvent être basées sur le code privé que vous avez indexé, en plus des résultats de la prise de conscience complète de la base de code.

Désactiver la personnalisation du code

  1. Pour répertorier tous les groupes de dépôts de l'index actuel dans un environnement shell, utilisez la commande 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
    

    Remplacez les éléments suivants :

    • REGION: région compatible, comme indiqué dans la section Avant de commencer de cette page, que vous avez configurée dans Developer Connect dans votre projet Google Cloud.
    • PROJECT_ID : ID de votre projet Google Cloud.
    • INDEX_NAME: nom de l'index que vous avez créé à l'étape précédente pour créer un index.
  2. Pour supprimer un groupe de dépôts de l'index actuel, utilisez la commande 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. Répétez l'étape 3 pour chaque groupe de dépôts jusqu'à ce que vous ayez supprimé tous les groupes de dépôts de l'index.

  4. Facultatif: Pour supprimer l'index, dans un environnement shell, utilisez la commande gemini code-repository-indexes delete:

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

Étape suivante