在 AWS 代碼管道中使用第三方 Git 源代碼存儲庫 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 AWS 代碼管道中使用第三方 Git 源代碼存儲庫

由基蘭庫瑪 ‧ 錢德拉瑟卡 (AWS) 創作

環境:PoC 或試驗

技術:DevOps

工作負載:開放原始碼

AWS 服務:AWS CodeBuild;AWS CodePipeline;

Summary

此模式描述了如何在第三方 Git 原始碼存放庫中使用 AWS 代碼管線。

AWS CodePipeline是一種持續交付服務,可將建置、測試和部署軟體的任務自動化。該服務目前支持由 GitHub 管理的 Git 存儲庫,AWS CodeCommit和亞特蘭西比特巴克。不過,有些企業會使用與其單一登入 (SSO) 服務和 Microsoft 使用中目錄整合的協力廠商 Git 存放庫進行驗證。您可以使用這些第三方 Git 存放庫作為 CodePipeline 的來源,藉由建立自訂動作和網路掛鉤。

Webhook 是一種 HTTP 通知,能在另一個工具中 (例如 GitHub 儲存庫) 偵測事件,並連接這些外部事件至管道。當您在 CodePipeline 中創建一個 webhook 時,該服務返回一個 URL,你可以在你的 Git 存儲庫的 webhook 中使用。如果你將代碼推送到 Git 存儲庫的特定分支,Git webhook 會通過這個 URL 啟動 CodePipeline webhook,並將管道的源代碼階段設置為進行中。當管線處於此狀態時,工作工作者會輪詢自訂工作的 CodePipeline、執行工作,並將成功或失敗狀態傳送至 CodePipeline。在這種情況下,由於管線位於來源階段,工作工作者會取得 Git 存放庫的內容、壓縮內容,然後將其上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體,並使用輪詢作業提供的物件金鑰來儲存管線人工因素。您也可以將自訂動作的轉換與 Amazon CloudWatch 中的事件產生關聯,然後根據事件啟動工作者。此安裝程式可讓您使用服務本身不支援的協力廠商 Git 存放庫做為 CodePipeline 的來源。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • 一個支持網絡鉤子的 Git 存儲庫,並可以通過互聯網連接到 CodePipeline 網絡鉤子 URL

  • AWS 命令列界面 (AWS CLI)安裝已配置以使用 AWS 帳戶

Architecture

模式需要以下步驟:

  1. 使用者將程式碼提交至 Git 儲存庫。

  2. Git 網絡鉤子被調用。

  3. 調用 CodePipeline 的 webhook。

  4. 管線設定為進行中,而且來源階段會設定為進行中狀態。

  5. 來源階段動作會啟動 CloudWatch 事件規則,指出該規則已啟動。

  6. 雲端 Watch 事件會啟動一個 Lambda 函數。

  7. Lambda 函數會取得自訂動作工作的詳細資料。

  8. Lambda 函數會啟動 AWS CodeBuild 並傳遞所有與工作相關的資訊。

  9. CodeBuild 從秘密管理器獲取 HTTPS Git 訪問的公共 SSH 密鑰或用戶認證。

  10. CodeBuild 成克隆特定分支的 Git 存儲庫。

  11. CodeBuild 會壓縮歸檔並將其上傳到作為 CodePipeline 工件存放區的 S3 儲存貯體。

Tools

  • AWS CodePipeline— AWS CodePipeline 是全受管的持續交付服務,可協助您將發行管線自動化,以進行快速且可靠的應用程式和基礎結構更新。CodePipeline 可根據您定義的發行模型,為每個程式碼變更自動化發行程序的組建、測試和部署階段。這可讓您快速且可靠地交付功能和更新。您可以將 AWS CodePipeline 與第三方服務 (例如 GitHub) 或您自己的自訂外掛程式整合。

  • AWS Lambda— AWS Lambda 可讓您執行程式碼,無需佈建或管理伺服器。使用 Lambda,您可以針對幾乎任何類型的應用程式或後端服務執行程式碼,無需管理。您可以上傳程式碼,Lambda 便會處理執行程式碼和擴展規模所需的一切工作,藉此維持高可用性。您可以將程式碼設定成,從其他 AWS 服務自動啟動,或者從任何 Web 或行動應用程式直接呼叫。

  • AWS CodeBuild— AWS CodeBuild 是一個完全受管持續整合服務,可編譯來源碼、執行測試,並產生可立即部署的軟體套件。使用 CodeBuild,您就不必佈建、管理和擴展自己的組建伺服器。CodeBuild 會持續擴展並同時處理多個組建,所以您的組建不必排入佇列中等候。您可以利用預先封裝好的組建環境立即開始使用,或是建立自訂的組建環境來使用您自己的組建工具。

  • AWS Secrets Manager— AWS Secrets Manager 可協助您保護存取應用程式、服務和 IT 資源時所需的秘密。此服務可讓您在資料庫登入資料、API 金鑰和其他機密的整個生命週期進行輪換、管理和擷取。使用者和應用程式可呼叫 Secrets Manager API 來擷取密碼,無需對純文字形式的敏感資訊執行硬編碼作業。Secrets Manager 器可為 Amazon Relational Database Service Amazon Redshift 和 Amazon DocumentDB 提供私有輪換功能。該服務可以擴展以支持其他類型的秘密,包括 API 密鑰和 OAuth 令牌。此外,Secrets Manager 可讓您透過使用細微的許可來控制私密的存取,以及針對 AWS 雲端、第三方服務和內部部署環境中的資源集中稽核私密輪換。

  • Amazon CloudWatch— Amazon CloudWatch 是一項監控和觀察服務,專為 DevOps 工程師、開發人員、網站可靠性工程師 (SRE) 和 IT 管理員而設計。CloudWatch 可為您提供資料和可行的洞見以監控應用程式、回應整個系統的效能變化、最佳化資源使用情況,以及透過整合的檢視來查看運作狀態。CloudWatch 會以日誌、指標和事件形式收集監控和操作資料,為您提供在 AWS 和現場部署伺服器上執行的 AWS 資源、應用程式和服務的統一檢視。您可以使用 CloudWatch 偵測環境中的異常行為、設定警示、並排顯示日誌和指標、採取自動化動作、疑難排解問題,以及探索深入解析,讓應用程式順暢執行。

  • Amazon S3— Amazon Simple Storage Service (Amazon S3) 是一種物件儲存服務,可讓您針對各種使用案例儲存和保護任何數量的資料,例如網站、行動應用程式、備份和還原、封存、企業應用程式、IoT 裝置和巨量資料分析。Amazon S3 提供易於使用的管理功能,可協助您組織資料並設定精細調整的存取控制,以滿足您的特定業務、組織和合規要求。

Epics

任務描述所需技能
使用 AWS CLI 或 AWS CloudFormation 建立自訂動作。

此步驟涉及建立自訂來源動作,該動作可用於特定區域的 AWS 帳戶中管線的來源階段。您必須使用 AWS CLI 或 AWS CloudFormation 式 (而非主控台) 來建立自訂來源動作。如需有關這個和其他史詩中所述的命令和步驟的詳細資訊,請參閱本模式結尾的 < 相關資源 > 一節。在 AWS CLI 中,使用建立自訂動作類型命令。使用 — 組態屬性來提供工作工作者在輪詢工作的 CodePipeline 時處理所需的所有參數。請務必記下提供給 —provider 和 —action 版本選項的值,以便在使用此自訂來源階段建立管線時,可以使用相同的值。您也可以使用資源類型 AWS። 程式 CodePipeline። 自訂類型,在 AWS CloudFormation 中建立自訂來源動作。

AWS 一般 AWS
任務描述所需技能
建立 SSH 金鑰對。

建立安全殼層 (SSH) key pair。如需說明,請參閱 GitHub 文件。

系統/開發工程師
在 AWS Secrets Manager 中建立秘密。

從 SSH key pair 複製私密金鑰的內容,並在 AWS Secrets Manager 中建立密碼。這個秘密用於訪問 Git 存儲庫時進行身份驗證。

AWS 一般 AWS
將公開金鑰新增至 Git 儲存庫。

將 SSH key pair 中的公開金鑰新增至 Git 儲存庫帳戶設定,以便針對私密金鑰進行驗證。

系統/開發工程師
任務描述所需技能
建立包含自訂來源動作的管線。

在 CodePipeline 中建立管道。設定來源階段時,請選擇您先前建立的自訂來源動作。您可以在 AWS CodePipeline 主控台或 AWS CLI 中執行此操作。CodePipeline 會提示您輸入您在自訂動作上設定的組態屬性。工作工作者需要此資訊,才能處理自訂動作的工作。遵循精靈並建立管線的下一個階段。

AWS 一般 AWS
創建一個 CodePipeline 的 webhook。

為您使用自定義源操作創建的管道創建一個 webhook。您必須使用 AWS CLI 或 AWS CloudFormation (而非主控台) 來建立網路掛鉤。在 AWS CLI 中,運行將 webhook 命令並為 webhook 選項提供適當的值。記下命令傳回的 webhook URL。如果您使用 AWS CloudFormation Pipeline። Webhook 來建立 Webhook,請使用資源類型 AWS። CodePipeline። Webhook。確保從創建的資源輸出 webhook URL,並記下它。

AWS 一般 AWS
建立 Lambda 函數和 CodeBuild 專案。

在這個步驟中,您可以使用 Lambda 和 CodePipeline 來建立工作工作者來輪詢 CodePipeline 的自訂動作、執行工作,然後將狀態結果傳回給 CodePipeline。當管線的自訂來源動作階段轉換為「進行中」時,建立由 Amazon CloudWatch Events 規則啟動的 Lambda 函數。啟動 Lambda 函數時,它應該會透過輪詢工作來取得自訂動作工作詳細資料。您可以使用 PollForJobs API 來傳回此資訊。取得輪詢的工作資訊之後,Lambda 函式應該會傳回認可,然後處理資訊與它從自訂動作的組態屬性取得的資料。當工作者準備好與 Git 存放庫交談時,您可能會啟動 CodeBuild 專案,因為使用 SSH 用戶端處理 Git 工作很方便。

一般 AWS,程式碼開發人員
任務描述所需技能
建立 CloudWatch Events 規則。

建立 CloudWatch 事件規則,在管線的自訂動作階段轉換為「進行中」時,啟動 Lambda 函數做為目標。

AWS 一般 AWS

在 CodePipeline 中建立自訂動作

設定身份驗證

創建一個管道和 webhook

建立事件

其他參考資料