本文說明如何透過 Google Cloud 控制台、Google Cloud CLI 或 Terraform,將 Gemini Code Assist 連線至私人程式碼存放區,設定 Gemini Code Assist 程式碼自訂功能。Gemini Code Assist 程式碼自訂功能會參考貴機構的內部程式庫、私人 API 和程式設計樣式,提供程式碼建議。
事前準備
確認您在擁有訂閱方案的專案中具備下列 Identity and Access Management 角色:
- 程式碼存放區索引管理員 (
roles/cloudaicompanion.codeRepositoryIndexesAdmin) - Gemini for Google Cloud 使用者 (
roles/cloudaicompanion.user)
- 程式碼存放區索引管理員 (
建立或設定使用者帳戶。貴機構中每位使用 Gemini Code Assist 的開發人員,都必須在 Google Cloud 中擁有使用者身分,且具備存取 Google Cloud 專案的權限。詳情請參閱「在 Google Cloud 控制台中授予角色」一文。確認每位使用者都具備下列角色:
程式碼自訂功能會使用 Developer Connect 存取私人存放區並建立索引。請確認 Developer Connect 存放區連線所在的 Developer Connect 區域,也是程式碼自訂功能的支援位置。如果 Developer Connect 連線位於不支援的區域,就無法使用程式碼自訂功能。如需支援的區域清單,請參閱程式碼自訂限制。
選擇要建立索引的存放區
最佳做法是為具有下列特徵的存放區建立索引:
- 當中的程式碼樣式或結構,與您希望開發人員編寫時採用的方式類似。
- 您要透過目前程式碼集呼叫的私人程式庫或 API。
選用:選擇不建立索引的檔案
程式碼自訂功能預設會為指定存放區中所有支援的程式碼檔案建立索引。
如要避免公開不想編入索引的程式碼,可以使用分支版本模式控管索引存取權,並使用穩定分支版本,例如 main。
或者,您也可以建立 .aiexclude 檔案,將檔案從索引中排除。
設定 Gemini Code Assist 程式碼自訂功能
選取下列其中一個選項:
控制台
前往 Google Cloud 控制台的「程式碼自訂」頁面。
前往 Gemini Code Assist 的程式碼自訂功能
系統會載入「Gemini Code Assist 的程式碼自訂功能」頁面。
建立索引。程式碼自訂功能會使用索引來分析及剖析存放區,使查詢與生成程式碼建議的速度更快。
按一下「建立」,然後設定索引詳細資料:
- 選取 Cloud 專案中 Developer Connect 設定的區域。
- 輸入索引名稱。請記下索引名稱。本文中的多個步驟都需要用到這個 ID。
按一下「建立」。
建立索引通常需要 30 分鐘,但最久可能需要一小時。索引作業完成後,您會在 Google Cloud 控制台收到通知。
Google 限制每個專案和機構只能有一個程式碼存放區索引。
使用存放區群組控管索引的存取權。
存放區群組是一種索引設定容器,內容包含存放區及其分支版本模式。存放區群組能提供精細的 IAM 控管機制,讓開發人員只能存取這些群組中已編入索引的資料,且必須具備
cloudaicompanion.repositoryGroups.use權限。存放區群組包含來自相同專案和位置的 Developer Connect 存放區或連結。
在「Gemini Code Assist 的程式碼自訂功能」頁面中,按一下「新增存放區」,然後選取「新增來源存放區」。
系統會顯示 Developer Connect 中現有的存放區清單,這些存放區位於您在上一個步驟中設定的區域,可建立索引。
如要將新存放區新增至存放區群組,請按一下「連結存放區」,然後按照 Google Cloud 控制台中的步驟操作。
此外,您也可以選取一或多個存放區,然後進行編輯,新增分支。
選取要新增存放區的存放區群組。 或者,按一下「建立新的存放區群組」,建立並設定新的存放區群組。
如要開始為所選存放區建立索引,請按一下「建立索引」。
建立索引的時間長短會因存放區大小而異。
CLI
- 確認您已設定 Developer Connect 並連線至存放區:
在殼層環境中執行
gcloud components update指令,確認您已將所有已安裝的 gcloud 元件更新至最新版本。在這個步驟中,您可以安裝並初始化 gcloud,也可以使用 Cloud Shell 編輯器。gcloud components update建立索引。程式碼自訂功能會使用索引來分析及剖析存放區,使查詢與生成程式碼建議的速度更快。
如要建立索引,請在殼層環境中使用
gemini code-repository-indexes create指令:gcloud gemini code-repository-indexes create INDEX_NAME \ --project=PROJECT_ID \ --location=REGION更改下列內容:
INDEX_NAME:索引名稱。重要事項: 請記下索引名稱。本文件中的多個步驟都需要這項資訊。PROJECT_ID:您的 Google Cloud 專案 ID。REGION:在 Cloud 專案的 Developer Connect 中設定的區域。如要成功執行指令,您必須指定支援的區域。
建立索引通常需要 30 分鐘,但最久可能需要一小時。
Google 限制每個專案和機構只能有一個程式碼存放區索引。
使用存放區群組控管索引的存取權。存放區群組是一種索引設定容器,內容包含存放區及其分支版本模式。存放區群組能提供精細的 IAM 控管機制,讓開發人員只能存取這些群組中已編入索引的資料,且必須具備
cloudaicompanion.repositoryGroups.use權限。存放區群組包含來自相同專案和位置的 Developer Connect 存放區或連結。
管理員會執行下列動作:
- 建立程式碼存放區索引資源。
- 在相同專案和位置中,設定新的 Developer Connect 連線。
- 連結連線中的 Git 存放區。
- 取得連結的資源名稱、為每個連結選擇要建立索引的分支模式,然後將連結放入一或多個存放區群組。
如要建立存放區群組,請在殼層環境中使用
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"}]'更改下列內容:
REPOSITORY_GROUP:存放區群組名稱,例如default。REPOSITORY_RESOURCE_NAME:Developer Connect 連線中的存放區名稱。如要找出存放區名稱,請前往 Google Cloud 控制台的「Git 存放區」頁面,然後在「存放區」分頁中,尋找表格「連線」欄底下的連線 ID。如要複製資源名稱,請按一下「更多選項」more_vert 選單,然後選取「複製資源路徑」。BRANCH_NAMES:要建立索引的分支名稱,例如main|dev。
您也可以使用 JSON (或 YAML) 檔案中定義的存放區建立存放區群組,格式如下:
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如要根據 JSON 或 YAML 檔案建立存放區群組,請在殼層環境中使用
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.jsonYAML
gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \ --project=PROJECT_ID \ --location=REGION \ --code-repository-index=INDEX_NAME \ --repositories=FILEPATH.yaml如要加密及控管資料,您也可以透過 Cloud Key Management Service,使用客戶管理的加密金鑰 (CMEK)。如要進一步瞭解如何使用 CMEK,請參閱「使用客戶管理的加密金鑰加密資料」。
在專案中將 IAM 角色授予存放區群組。
系統只會根據索引中的存放區內容,為您提供建議。每個存放區都屬於一或多個存放區群組。如要存取建議,您必須透過下列其中一種方式,將「Cloud AI Companion 存放區群組使用者」IAM 角色 (
roles/cloudaicompanion.repositoryGroupsUser) 授予存放區群組,當中包含必要的cloudaicompanion.repositoryGroups.userIAM 權限:- 授予主體整個索引的存取權。
授予主體索引部分內容的存取權。
整個索引
如要繫結專案的 IAM 政策,請在 Shell 環境中使用
projects add-iam-policy-binding指令:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='PRINCIPAL' \ --role='roles/cloudaicompanion.repositoryGroupsUser'更改下列內容:
PRINCIPAL:需要存取權主體的電子郵件地址,例如:user:test-user@gmail.com(個人) 或group:admins@example.com(群組)。
系統提示指定條件時,請輸入
None。
索引子集
您可以建立多個存放區群組,並將 IAM 角色指派給不同的 IAM 主體。
如要設定 IAM 政策,請準備 IAM 政策的 JSON 或 YAML 檔案,當中須列出 IAM 群組與指派的角色。例如:
bindings: - members: - group:my-group@example.com - user:test-user@example.com role: roles/cloudaicompanion.repositoryGroupsUser如需更多詳細資料和語法,請參閱「瞭解允許政策」。
如要設定 IAM 政策,請在殼層環境中使用
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更改下列內容:
GROUP_NAME:您在上一個步驟中建立的存放區群組名稱,可使用存放區群組控管索引的存取權。POLICY_FILE:IAM 政策。詳情請參閱
gcloud gemini code-repository-indexes repository-groups set-iam-policy。
Terraform
確認您已設定 Developer Connect 並連線至存放區:
建立索引。程式碼自訂功能會使用索引來分析及剖析存放區,使查詢與生成程式碼建議的速度更快。
resource "google_gemini_code_repository_index" "example" { location = "REGION" code_repository_index_id = "INDEX_NAME" }更改下列內容:
INDEX_NAME:索引名稱。重要事項: 請記下索引名稱。您需要這個 ID 才能完成本文中的幾個步驟。PROJECT_ID:您的 Google Cloud 專案 ID。REGION:在 Cloud 專案的 Developer Connect 中設定的區域。如要成功執行指令,您必須指定支援的區域。
建立索引通常需要 30 分鐘,但最久可能需要一小時。
Google 限制每個專案和機構只能有一個程式碼存放區索引。
使用存放區群組控管索引的存取權。存放區群組是一種索引設定容器,內容包含存放區及其分支版本模式。存放區群組能提供精細的 IAM 控管機制,讓開發人員只能存取這些群組中已編入索引的資料,且必須具備
cloudaicompanion.repositoryGroups.use權限。存放區群組包含來自相同專案和位置的 Developer Connect 存放區或連結。
管理員會執行下列動作:
- 建立程式碼存放區索引資源。
- 在相同專案和位置中,設定新的 Developer Connect 連線。
- 連結連線中的 Git 存放區。
- 取得連結的資源名稱、為每個連結選擇要建立索引的分支模式,然後將連結放入一或多個存放區群組。
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" } }更改下列內容:
REPOSITORY_GROUP:存放區群組名稱,例如default。REPOSITORY_RESOURCE_NAME:Developer Connect 連線中的存放區名稱。如要找出存放區名稱,請前往 Google Cloud 控制台的「Git repositories」(Git 存放區) 頁面,然後在「Repositories」(存放區) 分頁中,找出表格「Connection」(連線) 欄下方的連線 ID。如要複製資源名稱,請按一下「更多」more_vert 選單,然後選取「複製資源路徑」。BRANCH_NAMES:要建立索引的分支名稱,例如main|dev。
您也可以使用 JSON (或 YAML) 檔案中定義的存放區建立存放區群組,格式如下:
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如要根據 JSON 或 YAML 檔案建立存放區群組,請在殼層環境中使用
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.jsonYAML
gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \ --project=PROJECT_ID \ --location=REGION \ --code-repository-index=INDEX_NAME \ --repositories=FILEPATH.yaml如要加密及控管資料,您也可以透過 Cloud Key Management Service,使用客戶管理的加密金鑰 (CMEK)。如要進一步瞭解如何使用 CMEK,請參閱「使用客戶管理的加密金鑰加密資料」。
在專案中將 IAM 角色授予存放區群組。
系統只會根據索引中的存放區內容,為您提供建議。每個存放區都屬於一或多個存放區群組。如要存取建議,您必須透過下列其中一種方式,將「Cloud AI Companion 存放區群組使用者」IAM 角色 (
roles/cloudaicompanion.repositoryGroupsUser) 授予存放區群組,當中包含必要的cloudaicompanion.repositoryGroups.userIAM 權限:- 授予主體整個索引的存取權。
授予主體索引部分內容的存取權。
整個索引
如要繫結專案的 IAM 政策,請在 Shell 環境中使用
projects add-iam-policy-binding指令:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='PRINCIPAL' \ --role='roles/cloudaicompanion.repositoryGroupsUser'更改下列內容:
PRINCIPAL:需要存取權主體的電子郵件地址,例如:user:test-user@gmail.com(個人) 或group:admins@example.com(群組)。
系統提示指定條件時,請輸入
None。
索引子集
您可以建立多個存放區群組,並將 IAM 角色指派給不同的 IAM 主體。
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 ] }您也可以建立繫結:
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"] }更改下列內容:
GROUP_NAME:您在上一個步驟中建立的存放區群組名稱,用於透過存放區群組控管索引存取權。
查看索引狀態
視要建立索引的存放區數量和大小而定,建立內容索引最多可能需要 24 小時。如果存放區很大,建立索引的時間可能會比較長。系統每 24 小時會建立一次索引,擷取存放區中的所有變更。
搜尋
indexing記錄。詳情請參閱「Logging 查詢語言」。控制台
前往 Google Cloud 控制台的「記錄檔探索工具」。
使用記錄名稱篩選器查看
indexing記錄。
CLI
如要搜尋索引記錄,請在殼層環境中使用
logging read指令:gcloud logging read "logName="projects/PROJECT_ID/logs/indexing""將
PROJECT_ID替換為存放庫群組所在的專案 ID。舉例來說,如要查看
indexing記錄中的錯誤,請執行下列指令:gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"查看相關的索引狀態,例如:
- 存放區索引的開頭,例如
Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0. - 個別存放區索引編製作業結束,例如:
- 成功:
Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0. - 失敗:
Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
- 成功:
- 存放區索引編製作業結束,例如:
- 成功:
Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0. - 失敗:
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.
- 成功:
在索引狀態中,
REPOSITORY_NAME是您要查看的存放區。- 存放區索引的開頭,例如
查看相關的索引錯誤,例如:
- 無法擷取存放區。
- 無法列出存放區檔案。
- 無法從索引擷取存放區資訊。
- 無法從索引中擷取檔案。
- 發生內部錯誤。
使用程式碼自訂功能
設定程式碼自訂功能後,您會開始看到程式碼自動完成和程式碼生成建議,這些建議可能來自您已編列索引的私有程式碼,以及完整程式碼集認知結果。
如果開發人員加入的存放區群組中,至少有一個資源已建立索引,IDE 就會顯示通知,告知程式碼自訂功能已啟用。如要查看程式碼自訂狀態,開發人員可以點按右下角的 spark「Gemini」Gemini符號,並在搜尋列中尋找下列其中一個程式碼自訂狀態:
- 大功告成。已啟用並設定程式碼自訂功能。
- 無法使用。開發人員缺少存放區群組存取權,或使用者有權存取的存放區群組為空白。
- 未設定。管理員未啟用或設定程式碼自訂功能。
如要進一步瞭解如何使用程式碼自訂功能及最佳做法,請參閱「使用程式碼自訂功能」。
關閉程式碼自訂功能
選取下列其中一個選項:
控制台
前往 Google Cloud 控制台的「Gemini Products」頁面。
系統會載入「Gemini 產品」頁面。
在導覽選單中,按一下「程式碼自訂」。
系統會載入「程式碼自訂」頁面。
如要刪除索引,請按一下「刪除」。
系統隨即會顯示警告訊息。如要繼續刪除索引,請輸入索引名稱,然後按一下「Delete」(刪除)。
CLI
如要列出目前索引的所有存放區群組,請在殼層環境中使用
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更改下列內容:
REGION:在 Cloud 專案的 Developer Connect 中設定的區域。如要成功執行指令,您必須指定支援的區域。PROJECT_ID:您的 Google Cloud 專案 ID。INDEX_NAME:您在上一個步驟中建立的索引名稱,用於建立索引。
如要從目前的索引刪除存放區群組,請使用
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針對每個存放區群組重複上述步驟,直到從索引中刪除所有存放區群組為止。
選用:如要刪除索引,請在殼層環境中使用
gemini code-repository-indexes delete指令:gcloud gemini code-repository-indexes delete INDEX_NAME \ --location=REGION \ --project=PROJECT_ID
後續步驟
- 開始使用 Gemini Code Assist:
- VS Code、IntelliJ 和其他支援的 JetBrains IDE:使用 Gemini Code Assist 編寫程式碼
- Cloud Shell:透過 Gemini Code Assist 編寫程式碼
- Cloud Workstations:透過 Gemini Code Assist 編寫程式碼
- 瞭解如何自訂程式碼和最佳做法。
- 瞭解如何使用客戶自行管理的加密金鑰 (CMEK) 加密資料。
- 進一步瞭解 Developer Connect。
- 瞭解 Gemini for Google Cloud 如何使用您的資料。