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 社群提供的建構步驟,也可以撰寫自己的自訂建構步驟:
- Cloud Build 提供的建構步驟:Cloud Build 針對常見語言和工作發布了一組支援的開放原始碼建構步驟。
- 社群提供的建構步驟:Cloud Build 使用者社群提供了開放原始碼建構步驟。
- 自訂建構步驟:您可以 建立自己的建構步驟,以便在建構中使用。
每個建構步驟都會在其容器連接至名為 cloudbuild 的本機 Docker 網路之後執行。如此一來,建構步驟就可以彼此通訊並共用資料。如要進一步瞭解 cloudbuild 網路,請參閱「Cloud Build 網路」。
您可以在 Cloud Build 中使用標準 Docker Hub 映像檔,例如 Ubuntu 和 Gradle。
啟動建構
您可以使用 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 區段的「建構歷史記錄」頁面查看結果,該頁面會顯示 Cloud Build 執行的每一次建構的詳細資料和記錄。如需操作說明,請參閱「查看建構結果」。
建構的運作方式
下列步驟大致說明 Cloud Build 建構的生命週期:
- 準備應用程式程式碼與任何所需資產。
- 建立 YAML 或 JSON 格式的建構設定檔,其中包含 Cloud Build 的操作說明。
- 將建構提交至 Cloud Build。
- Cloud Build 會根據您提供的建構設定執行建構。
- 如果適用,系統會將所有建構的構件推送至 Artifact Registry。
Docker
Cloud Build 會使用 Docker 執行建構作業。對於每個建構步驟,Cloud Build 都會執行 Docker 容器做為 docker run 的執行個體。目前 Cloud Build 執行的是 Docker 引擎 20.10.24 版。
Cloud Build 介面
您可以將 Cloud Build 與 Google Cloud 主控台、gcloud指令列工具或 Cloud Build 的 REST API 搭配使用。
您可以使用 gcloud CLI 建立及管理建構。您可以執行指令,以執行提交建構、列出建構和取消建構等工作。
您可以使用 Cloud Build REST API 要求建構。
與其他 Cloud Platform API 一樣,您必須使用 OAuth2 授予存取權。授予存取權之後,您可以使用 API 啟動新建構、查看建構狀態與詳細資料、列出每個專案的建構,以及取消目前正在處理的建構。
詳情請參閱 API 說明文件。
預設集區和私人集區
根據預設,在 Cloud Build 上執行建構作業時,建構作業會在安全的託管環境中執行,並存取公開網際網路。每項建構作業都會在專屬的工作站上執行,並與其他工作負載隔離。您可以透過多種方式自訂建構作業,包括增加機器類型的大小或分配更多磁碟空間。預設集區的環境自訂程度有限,尤其是私人網路存取權。
私人集區是專屬的私人工作站集區,可提供更完善的建構環境自訂功能,包括存取私人網路中資源的能力。私人集區與預設集區類似,都是由 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 掃描的映像檔名稱。按一下圖片名稱即可查看安全漏洞詳細資料。
- 建構作業詳細資料:建構作業的詳細資料,例如建構工具和記錄檢視連結。
- 建構來源:建構作業的來源。
如要瞭解如何搭配使用 Cloud Build 與其他 Google Cloud 產品 和功能,確保軟體供應鏈安全無虞,請參閱「軟體供應鏈安全」。