Konfigurowanie dostosowywania kodu w Gemini Code Assist

Ten dokument zawiera opis konfigurowania dostosowywania kodu w Gemini Code Assist przez łączenie Gemini Code Assist z prywatnymi repozytoriami kodu. Ta funkcja umożliwia otrzymywanie rekomendacji dotyczących kodu, które są oparte na bibliotekach wewnętrznych, prywatnych interfejsach API i stylu kodowania Twojej organizacji.

Zanim zaczniesz

Wybierz, które repozytoria prywatne mają być połączone

Zalecamy łączenie repozytoriów, które:

  • mieć kod o stylu lub strukturze podobnej do tej, którą mają stosować Twoi programiści;
  • masz prywatne biblioteki lub interfejsy API, które chcesz wywoływać z obecnej bazy kodu,

(Opcjonalnie) Wybierz pliki, które nie mają być indeksowane

Domyślnie indeksowanie dostosowywania kodu obejmuje wszystkie obsługiwane pliki z kodem w określonych repozytoriach.

Aby zapobiec ujawnieniu kodu, którego nie chcesz indeksować, możesz użyć wzorców gałęzi, aby kontrolować dostęp do indeksu, i użyć stabilnej gałęzi, np. main.

Możesz też wykluczyć pliki z indeksu, tworząc plik .aiexclude.

Utwórz indeks

Dostosowywanie kodu opiera się na indeksie, który umożliwia analizę pozwalającą szybciej generować sugestie i wyszukiwać kod.

gcloud

Aby utworzyć indeks, w środowisku powłoki użyj gemini code-repository-indexes createpolecenia:

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"
}

Zastąp następujące elementy:

  • INDEX_NAME: nazwa indeksu. Ważne: zapisz nazwę indeksu. Będzie on potrzebny w kilku krokach tego dokumentu.
  • PROJECT_ID: identyfikator Twojego projektu Google Cloud;
  • REGION: obsługiwany region, jak podano w sekcji Zanim zaczniesz na tej stronie, który został skonfigurowany w Developer Connect w projekcie Google Cloud.

Tworzenie indeksu trwa zwykle 30 minut, ale może potrwać nawet godzinę.

Google ogranicza liczbę indeksów repozytoriów kodu do jednego na projekt i organizację.

Kontrolowanie dostępu do indeksu za pomocą grup repozytoriów

Grupa repozytoriów to kontener konfiguracji indeksowania, który zawiera repozytoria i wzorce ich gałęzi. Grupy repozytoriów są przeznaczone do szczegółowej kontroli dostępu, dzięki czemu deweloperzy mają dostęp do indeksowanych danych z tych grup, w których mają uprawnienie cloudaicompanion.repositoryGroups.use.

Grupy repozytoriów zawierają repozytoria Developer Connect lub linki z tego samego projektu i lokalizacji.

Administratorzy wykonują te czynności:

  • Tworzy zasób indeksu repozytorium kodu.
  • W tym samym projekcie i lokalizacji skonfiguruj nowe połączenie Developer Connect.
  • Połącz repozytoria Git w połączeniu.
  • Pobierz nazwy zasobów linków, wybierz wzorzec gałęzi do indeksowania dla każdego linku i umieść go w co najmniej 1 grupie repozytoriów.

gcloud

Aby utworzyć grupę repozytoriów, w środowisku powłoki użyj gemini code-repository-indexes repository-groups createpolecenia:

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"
  }
}

Zastąp następujące elementy:

  • REPOSITORY_GROUP: nazwa grupy repozytoriów, np. default.
  • PROJECT_ID: identyfikator Twojego projektu Google Cloud;
  • REGION: obsługiwany region, jak podano w sekcji Zanim zaczniesz na tej stronie, który został skonfigurowany w Developer Connect w projekcie Google Cloud.
  • INDEX_NAME: nazwa indeksu utworzonego w poprzednim kroku, aby utworzyć indeks.
  • REPOSITORY_RESOURCE_NAME: nazwa repozytorium w połączeniu Developer Connect. Aby znaleźć nazwę repozytorium, otwórz stronę Developer Connect w konsoli Google Cloud i na karcie Repozytoria w kolumnie Połączenie w tabeli poszukaj identyfikatora połączenia. Aby skopiować nazwę zasobu, kliknij menu more_vert, aby wyświetlić więcej opcji, i wybierz Kopiuj ścieżkę zasobu.
  • BRANCH_NAMES: nazwa gałęzi, które chcesz indeksować, np. main|dev.

Możesz też utworzyć grupę repozytoriów z repozytoriami zdefiniowanymi w pliku JSON (lub YAML) w tym formacie:

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

Aby utworzyć grupę repozytoriów na podstawie pliku JSON lub YAML, w środowisku powłoki użyj polecenia 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

Jeśli wolisz, możesz szyfrować dane i kontrolować je za pomocą klucza szyfrowania zarządzanego przez klienta (CMEK) w usłudze Cloud Key Management Service. Więcej informacji o używaniu klucza CMEK znajdziesz w artykule Szyfrowanie danych za pomocą kluczy szyfrowania zarządzanych przez klienta.

Przyznawanie roli uprawnień grupie repozytoriów w projekcie

Otrzymujesz tylko sugestie z repozytoriów w indeksie. Każde repozytorium należy do co najmniej 1 grupy repozytoriów. Aby uzyskać dostęp do sugestii, musisz przyznać rolę użytkownika grup repozytoriów usługi Cloud AI Companion (roles/cloudaicompanion.repositoryGroupsUser), która zawiera wymagane uprawnienie cloudaicompanion.repositoryGroups.user, grupie repozytoriów w jeden z tych sposobów:

  • Przyznaj podmiotom zabezpieczeń uprawnienia dostępu do całego indeksu.
  • Przyznawanie podmiotom zabezpieczeń dostępu do podzbioru indeksu.

Przyznawanie podmiotom uprawnień dostępu do całego indeksu

  1. Aby powiązać uprawnienia projektu w środowisku powłoki, użyj projects add-iam-policy-binding polecenia:

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

    Zastąp następujące elementy:

    • PROJECT_ID: identyfikator projektu, w którym znajduje się grupa repozytoriów.
    • PRINCIPAL: adres e-mail podmiotu, który potrzebuje dostępu, np. user:test-user@gmail.com w przypadku osoby lub group:admins@example.com w przypadku grupy.

    Więcej informacji znajdziesz w sekcji gcloud projects set-iam-policy.

  2. Gdy pojawi się prośba o określenie warunku, wpisz None.

Przyznawanie podmiotom zabezpieczeń dostępu do podzbioru indeksu

Możesz utworzyć wiele grup repozytoriów i przypisać role IAM do różnych podmiotów zabezpieczeń.

gcloud

Aby skonfigurować zasady uprawnień, musisz przygotować plik JSON lub YAML zasad uprawnień, który będzie zawierać listę grup uprawnień i przypisanych ról. Na przykład:

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

Więcej informacji i składnię znajdziesz w artykule Omówienie zasad zezwalania.

Aby ustawić uprawnienia, w środowisku powłoki użyj polecenia 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

Zastąp następujące elementy:

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
  ]
}

Możesz też utworzyć powiązanie:

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"]
}

Zastąp następujące elementy:

Sprawdzanie stanu indeksowania

W zależności od liczby repozytoriów, które chcesz zindeksować, i ich rozmiaru indeksowanie treści może potrwać do 24 godzin. W przypadku dużych repozytoriów indeksowanie może potrwać dłużej. Indeksowanie odbywa się raz na 24 godziny i uwzględnia wszystkie zmiany wprowadzone w repozytorium.

  1. Wyszukaj dzienniki indexing. Więcej informacji znajdziesz w artykule Język zapytań usługi Logging.

    Konsola

    1. W konsoli interfejsów API Google otwórz Eksplorator logów.

      Otwórz Eksplorator logów

    2. Użyj filtra nazw logów, aby wyświetlić logi indexing.

    gcloud

    Aby wyszukać dzienniki indeksowania, w środowisku powłoki użyj logging readpolecenia:

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

    Zastąp PROJECT_ID identyfikatorem projektu, w którym znajduje się grupa repozytoriów.

    Aby na przykład wyświetlić błędy w dziennikach indexing, uruchom to polecenie:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. Sprawdź powiązane stany indeksowania, np.:

    • Początek indeksowania repozytorium, np. Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.
    • Koniec indeksowania poszczególnych repozytoriów, na przykład:
      • Udało się: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • Niepowodzenie: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Koniec indeksowania repozytorium, np.:
      • Udało się: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Niepowodzenie: 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.

    W przypadku stanów indeksu REPOSITORY_NAME to repozytorium, które chcesz sprawdzić.

  3. Sprawdź powiązane błędy indeksowania, takie jak:

    • Nie udało się pobrać repozytorium.
    • Nie udało się wyświetlić listy plików repozytorium.
    • Nie udało się pobrać informacji o repozytorium z indeksu.
    • Nie udało się pobrać plików z indeksu.
    • Błąd wewnętrzny.

Korzystanie z dostosowywania kodu

Po skonfigurowaniu dostosowywania kodu zaczniesz otrzymywać sugestie dotyczące uzupełniania i generowania kodu, które mogą być oparte na indeksowanym przez Ciebie kodzie prywatnym, a także na wynikach pełnej analizy bazy kodu.

Więcej informacji o korzystaniu z dostosowywania kodu i o sprawdzonych metodach znajdziesz w artykule Korzystanie z dostosowywania kodu.

Wyłączanie dostosowywania kodu

  1. Aby wyświetlić listę wszystkich grup repozytoriów dla bieżącego indeksu, w środowisku powłoki użyj gemini code-repository-indexes repository-groups list polecenia:

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

    Zastąp następujące elementy:

    • REGION: obsługiwany region, zgodnie z informacjami w sekcji Zanim zaczniesz na tej stronie, który został skonfigurowany w Developer Connect w Twoim projekcie Google Cloud.
    • PROJECT_ID: identyfikator Twojego projektu Google Cloud;
    • INDEX_NAME: nazwa indeksu utworzonego w poprzednim kroku, aby utworzyć indeks.
  2. Aby usunąć grupę repozytoriów z bieżącego indeksu, użyj polecenia 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. Powtarzaj krok 3 dla każdej grupy repozytoriów, aż usuniesz z indeksu wszystkie grupy repozytoriów.

  4. Opcjonalnie: aby usunąć indeks, w środowisku powłoki użyj polecenia gemini code-repository-indexes delete:

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

Co dalej?