本文說明如何透過 Google Cloud CLI 或 Terraform,在 Google Cloud 控制台中設定 Gemini Code Assist 程式碼自訂功能,方法是將 Gemini Code Assist 連線至私人程式碼存放區。Gemini Code Assist 程式碼自訂功能會參考貴機構的內部程式庫、私人 API 和程式設計樣式,提供程式碼建議。
事前準備
- 透過企業版訂閱方案設定 Gemini Code Assist。
確認您在擁有訂閱項目的專案中,具備下列 Identity and Access Management (IAM) 角色:
- 程式碼存放區索引管理員 (
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 的程式碼自訂功能」頁面。
建立索引。為了更快生成程式碼建議及查詢,這項功能須使用索引來分析及剖析存放區。
按一下「建立」,然後設定索引詳細資料:
- 選取在 Google Cloud 專案的 Developer Connect 中設定的區域。
- 輸入索引名稱。請記下索引名稱,本文中的幾個步驟都需要用到這個 ID。
點選「建立」。
建立索引通常需要 30 分鐘,但最多可能需要一小時。索引編製完成後,您會在 Google Cloud 控制台中收到通知。
Google 會限制每個專案和機構只能有一個程式碼存放區索引。
使用存放區群組控管索引存取權。
存放區群組是索引設定的容器,包含存放區及其分支模式。存放區群組的設計目的是為了提供精細的 IAM 控制項,讓開發人員存取這些群組的索引資料,前提是他們具備
cloudaicompanion.repositoryGroups.use權限。存放區群組包含來自相同專案和位置的 Developer Connect 存放區或連結。
在「Gemini Code Assist 的程式碼自訂功能」頁面上,按一下「新增存放區」,然後選取「新增來源存放區」。
系統會顯示 Developer Connect 中現有的存放區清單,這些存放區位於您在上一個步驟中設定的區域,可建立索引。
如要將新存放區新增至存放區群組,請按一下「連結存放區」,然後按照 Google Cloud 控制台中的步驟操作。
此外,您也可以選取一或多個存放區,然後進行編輯,新增分支。
選取要新增存放區的存放區群組。 或者,按一下「建立新的存放區群組」,建立並設定新的存放區群組。
如要開始為所選存放區建立索引,請按一下「建立索引」。
建立索引的時間長短會依存放區大小而異。
CLI
- 確認你已設定開發人員連線並連線至存放區:
在 Shell 環境中執行
gcloud components update指令,確認您已將 gcloud CLI 的所有已安裝元件更新至最新版本。在這個步驟中,您可以安裝及初始化 gcloud CLI,也可以使用 Cloud Shell 編輯器。gcloud components update建立索引。為了更快生成程式碼建議及查詢,這項功能須使用索引來分析及剖析存放區。
如要建立索引,請在 Shell 環境中使用
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:在 Google Cloud 專案的 Developer Connect 中設定的區域。如要成功執行指令,您必須指定支援的區域。
建立索引通常需要 30 分鐘,但最多可能需要一小時。
Google 會限制每個專案和機構只能有一個程式碼存放區索引。
使用存放區群組控管索引存取權。存放區群組是索引設定的容器,包含存放區及其分支模式。存放區群組專為精細的 IAM 控制機制而設計,可讓開發人員存取這些群組的索引資料,前提是他們具備
cloudaicompanion.repositoryGroups.use權限。存放區群組包含來自相同專案和位置的 Developer Connect 存放區或連結。
管理員會執行下列動作:
- 建立程式碼存放區索引資源。
- 在相同專案和位置中,設定新的 Developer Connect 連線。
- 連結連線中的 Git 存放區。
- 取得連結的資源名稱,為每個連結選擇要建立索引的分支模式,然後將連結放入一或多個存放區群組。
如要建立存放區群組,請在 Shell 環境中使用
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 檔案建立存放區群組,請在 Shell 環境中使用
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 政策,請在 Shell 環境中使用
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:身分與存取權管理政策。詳情請參閱
gcloud gemini code-repository-indexes repository-groups set-iam-policy。
Terraform
確認您已設定開發人員連線並連線至存放區:
建立索引。為了更快生成程式碼建議及查詢,這項功能須使用索引來分析及剖析存放區。
resource "google_gemini_code_repository_index" "example" { location = "REGION" code_repository_index_id = "INDEX_NAME" }更改下列內容:
INDEX_NAME:索引名稱。重要事項: 請記下索引名稱。您會在本文的幾個步驟中用到這個 ID。PROJECT_ID:您的 Google Cloud 專案 ID。REGION:在 Google 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 存放區」頁面,然後在「存放區」分頁中,尋找表格「連線」欄下方的連線 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 檔案建立存放區群組,請在 Shell 環境中使用
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 查詢語言」。主控台
CLI
如要搜尋索引記錄,請在 Shell 環境中使用
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:在 Google 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針對每個存放區群組重複上述步驟,直到從索引中刪除所有存放區群組為止。
選用:如要刪除索引,請在 Shell 環境中使用
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 如何及何時使用您的資料。