Cloud Build 總覽

Cloud Build 服務可在 Google Cloud上執行建構作業。

Cloud Build 可從各種存放區或雲端儲存空間匯入原始碼、依據您的規格執行建構,並產生 Docker 容器或 Java 封存檔案等成果。

您也可以使用 Cloud Build 保護軟體供應鏈。Cloud Build 功能符合「軟體構件供應鏈級別 (SLSA)」第 3 級的規定。如需建構程序保護指南,請參閱「保護建構作業」。

建構設定與建構步驟

您可以撰寫建構設定,為 Cloud Build 提供執行工作的操作說明。您可以設定建構以擷取依附元件,執行單元測試、靜態分析和整合測試,並使用 docker、gradle、maven、bazel 與 gulp 等建構工具建立成果。

Cloud Build 會以一系列建構步驟執行建構,而每個建構步驟都會在 Docker 容器中執行。執行建構步驟類似於執行指令碼中的指令。

您可以使用 Cloud Build 與 Cloud Build 社群提供的建構步驟,也可以撰寫自己的自訂建構步驟:

每個建構步驟都會在其容器連接至名為 cloudbuild 的本機 Docker 網路之後執行。如此一來,建構步驟就可以彼此通訊並共用資料。如要進一步瞭解 cloudbuild 網路,請參閱 Cloud Build 網路

您可以在 Cloud Build 中使用標準 Docker Hub 映像檔,例如 UbuntuGradle

啟動建構

您可以使用 Google Cloud CLI 或 Cloud Build API,在 Cloud Build 中手動啟動建構作業,也可以使用 Cloud Build 的建構觸發條件建立自動化持續整合/持續部署 (CI/CD) 工作流程,以便在程式碼變更時啟動新的建構作業。

您可以將建構觸發條件與許多程式碼存放區整合,包括 Cloud Source Repositories、GitHub 與 Bitbucket。

查看建構結果

您可以使用 gcloud CLI、Cloud Build API 查看建構結果,或使用Google Cloud 主控台 Cloud Build 區段的「Build History」頁面查看結果,該頁面會顯示 Cloud Build 執行的每一次建構的詳細資料和記錄。如需操作說明,請參閱「查看建構結果」。

建構的運作方式

下列步驟大致說明 Cloud Build 建構的生命週期:

  1. 準備應用程式程式碼與任何所需資產。
  2. 建立 YAML 或 JSON 格式的建構設定檔,其中包含 Cloud Build 的操作說明。
  3. 將建構提交至 Cloud Build。
  4. Cloud Build 會根據您提供的建構設定執行建構。
  5. 如果適用,系統會將所有建構的構件推送至 Artifact Registry

Docker

Cloud Build 會使用 Docker 執行建構作業。對於每個建構步驟,Cloud Build 都會執行 Docker 容器做為 docker run 的例項。Cloud Build 目前執行的是 Docker 引擎 20.10.24 版。

Cloud Build 介面

您可以將 Cloud Build 與主控台、gcloud 指令列工具或 Cloud Build 的 REST API 搭配使用。 Google Cloud

在 Google Cloud 控制台中,您可以在「Build History」頁面中查看 Cloud Build 建構結果,並在「Build Triggers」中自動建構。

您可以使用 gcloud CLI 建立和管理建構。您可以執行指令,以執行提交建構列出建構取消建構等工作。

您可以使用 Cloud Build REST API 要求建構。

與其他 Cloud Platform API 一樣,您必須使用 OAuth2 授予存取權。授予存取權之後,您可以使用 API 啟動新建構、查看建構狀態與詳細資料、列出每個專案的建構,以及取消目前正在處理的建構。

詳情請參閱 API 說明文件

預設集區和私人集區

根據預設,在 Cloud Build 上執行建構作業時,建構作業會在安全的託管環境中執行,並存取公開網際網路。每個版本都會在自己的worker 上執行,並與其他工作負載隔離。您可以透過多種方式自訂建構作業,包括增加機器類型的大小或分配更多磁碟空間。預設集區會限制您自訂環境的程度,尤其是私人網路存取權。

私人集區為專屬私人工作站集區,可提供更完善的建構環境自訂選項,包括存取私人網路中的資源。私人集區與預設集區類似,由 Cloud Build 代管及完全管理,並可擴充及縮減資源至零,完全不需設定、升級或擴充基礎架構。由於私人集區是特定客戶的資源,因此您可以透過更多方式設定私人集區。

如要進一步瞭解私人集區,以及預設集區和私人集區之間的功能差異,請參閱「私人集區總覽」。

建構安全性

Cloud Build 提供多項功能,可確保建構作業的安全性,包括:

  • 自動化建構作業

    自動化建構或指令碼建構會在建構指令碼或建構設定中定義所有建構步驟,包括擷取原始碼的步驟,以及建構程式碼的步驟。唯一的手動指令 (如果有的話) 是執行建構作業的指令。Cloud Build 會使用建構設定檔提供建構步驟給 Cloud Build。

    自動建構可提供一致的建構步驟。不過,在一致且可信任的環境中執行版本也是很重要的一環。

    雖然本機版本可用於偵錯,但從本機版本發布軟體可能會在建構程序中引發許多安全性疑慮、不一致性和效率低落的問題。

    • 允許本機建構會讓惡意攻擊者有辦法修改建構程序。
    • 開發人員本機環境和開發人員做法不一致,因此難以重現建構作業並診斷建構問題。

    SLSA 架構的規定中,自動化建構是 SLSA 1 級的必要條件,而使用建構服務而非開發人員環境進行建構,則是 SLSA 2 級的必要條件。

  • 建構來源

    版本來源是一組可驗證的版本資料。

    來源中繼資料包含詳細資料,例如已建構映像檔的摘要、輸入來源位置、建構工具鍊和建構時長。

    產生建構來源資訊可協助您:

    • 確認已從受信任的來源位置,透過受信任的建構系統建立建構成果。
    • 找出從不受信任的來源位置或建構系統插入的程式碼。

    您可以使用快訊和政策機制,主動使用建構來源資料。舉例來說,您可以建立政策,只允許從已驗證來源建構的程式碼進行部署。

    Cloud Build 可為提供 SLSA 第 3 級保證的容器映像檔產生建構來源。詳情請參閱「查看建構來源」。

  • 短暫建構環境

    暫時環境是指只會在單一建構作業呼叫期間存在的臨時環境。建構完成後,系統會清除或刪除環境。暫時性建構可確保建構服務和建構步驟在暫時性環境 (例如容器或 VM) 中執行。建構服務不會重複使用現有的建構環境,而是為每個建構作業提供新的環境,並在建構程序完成後將其銷毀。

    臨時環境可確保乾淨的建構作業,因為其中沒有先前建構作業的殘留檔案或環境設定,不會干擾建構程序。非暫時性環境為攻擊者提供了注入惡意檔案和內容的機會。暫時環境還可減少維護負擔,並減少建構環境中的不一致性。

    Cloud Build 會為每個建構作業設定新的虛擬機器環境,並在建構作業完成後將其銷毀。

  • 部署政策

    您可以將 Cloud Build 與二進位授權整合,檢查建構認證,並封鎖非由 Cloud Build 產生的映像檔部署作業。這項程序可降低部署未經授權軟體的風險。

  • 客戶自行管理的加密金鑰

    Cloud Build 預設提供客戶管理的加密金鑰 (CMEK) 相容性。使用者不必特別設定任何項目。Cloud Build 會使用為每個建構作業產生的暫時性金鑰,為建構期間的永久磁碟 (PD) 進行加密,以符合 CMEK 規定。系統會為每個版本產生專屬的金鑰。

    建構作業完成後,系統就會從記憶體中清除並銷毀金鑰。這類資料不會儲存在任何地方,Google 工程師或支援人員無法存取,也無法復原。使用這類金鑰保護的資料將永久無法存取。詳情請參閱「Cloud Build 中的 CMEK 法規遵循」。

  • 安全性洞察資料面板

    Cloud Build 在Google Cloud 控制台中提供「安全性深入分析資訊」面板,可顯示多項安全性指標的概略總覽。您可以使用這個面板,找出並降低建構程序中的風險。

    這個面板會顯示下列資訊:

    • 軟體構件供應鏈級別 (SLSA) 等級:根據 SLSA 規格,識別軟體建構程序的成熟度等級。

    • 安全漏洞:概略說明構件中發現的所有安全漏洞,以及Artifact Analysis 掃描的映像檔名稱。您可以按一下映像檔名稱,查看安全漏洞詳細資料。舉例來說,您可以按一下螢幕截圖中的 java-guestbook-backend

    • 建構作業詳細資料:建構作業的詳細資料,例如建構工具和查看記錄的連結。

    • 建構來源:建構作業來源。

如要瞭解如何搭配使用 Cloud Build 和其他 Google Cloud 產品和功能來保護軟體供應鏈,請參閱「軟體供應鏈安全性」。

後續步驟