本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 中使用第三方 Git 來源儲存庫 AWS CodePipeline
由 Kirankumar Chandrashekar 建立 (AWS)
環境:PoC 或試行 | 技術: DevOps | 工作負載:開放原始碼 |
AWS 服務:AWS CodeBuild;AWS CodePipeline;AWSLambda |
Summary
請注意: AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可以繼續正常使用服務。進一步了解
此模式說明如何AWS CodePipeline 與第三方 Git 來源儲存庫搭配使用。
AWS CodePipeline 是一項持續交付服務,可自動化建置、測試和部署軟體的任務。服務目前支援由 GitHub、 AWS CodeCommit
Webhook 是偵測其他工具中事件的HTTP通知,例如 GitHub 儲存庫,並將這些外部事件連接到管道。當您在 中建立 Webhook 時 CodePipeline,服務會傳回您可以在 Git URL 儲存庫 Webhook 中使用的 。如果您將程式碼推送至 Git 儲存庫的特定分支,Git Webhook 會透過此 啟動 CodePipeline WebhookURL,並將管道的來源階段設定為進行中。當管道處於此狀態時,任務工作者 CodePipeline 會輪詢自訂任務、執行任務,並將成功或失敗狀態傳送至 CodePipeline。在此情況下,由於管道處於來源階段,作業工作者會使用輪詢作業提供的物件金鑰,取得 Git 儲存庫的內容、壓縮內容,並將其上傳至存放管道成品的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。您也可以將自訂動作的轉換與 Amazon 中的事件建立關聯 CloudWatch,並根據事件啟動任務工作者。此設定可讓您使用服務原生不支援作為 來源的第三方 Git 儲存庫 CodePipeline。
先決條件和限制
先決條件
架構
模式涉及下列步驟:
使用者將程式碼遞交至 Git 儲存庫。
Git Webhook 稱為 。
CodePipeline Webhook 稱為 。
管道設定為進行中 ,來源階段設定為進行中狀態。
來源階段動作會啟動 CloudWatch 事件規則,指出已啟動。
CloudWatch 事件會啟動 Lambda 函數。
Lambda 函數會取得自訂動作任務的詳細資訊。
Lambda 函數會啟動AWS CodeBuild 並傳遞所有與任務相關的資訊。
CodeBuild 從 Secrets Manager 取得 HTTPS Git 存取的公有SSH金鑰或使用者憑證。
CodeBuild 複製特定分支的 Git 儲存庫。
CodeBuild 壓縮封存,並將其上傳至用作 CodePipeline 成品存放區的 S3 儲存貯體。
工具
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 來擷取秘密APIs,而不必以純文字硬式編碼敏感資訊。Secrets Manager 提供秘密輪換,並內建 Amazon Relational Database Service (AmazonRDS)、Amazon Redshift 和 Amazon DocumentDB 的整合。服務可以擴展以支援其他類型的秘密,包括API金鑰和OAuth字符。此外,Secrets Manager 可讓您使用精細的許可來控制對秘密的存取,並針對AWS雲端、第三方服務和內部部署環境中的資源集中稽核秘密輪換。 Amazon CloudWatch
– Amazon CloudWatch 是為 DevOps 工程師建置的監控和觀察服務, 開發人員、 網站可靠性工程師 (SREs)、 和 IT Manager. CloudWatch 為您提供資料和可行的洞察,以監控您的應用程式、 回應全系統效能變更 最佳化資源使用率、 並取得營運運作狀態的統一檢視。以日誌的形式 CloudWatch 收集監控和營運資料, 指標、 和 事件 為您提供AWS資源的統一檢視, 應用程式、 在 AWS和內部部署伺服器上執行的 和 服務。您可以使用 CloudWatch 來偵測環境中的異常行為、設定警示、並排視覺化日誌和指標、採取自動化動作、疑難排解問題,以及探索洞見,讓您的應用程式保持順暢運作。 Amazon S3
– Amazon Simple Storage Service (Amazon S3) 是一種物件儲存服務,可讓您針對各種使用案例儲存和保護任何數量的資料,例如網站、行動應用程式、備份和還原、封存、企業應用程式、IoT 裝置和大數據分析。Amazon S3 提供 easy-to-use管理功能,可協助您整理資料,並設定微調後的存取控制,以符合特定業務、組織和合規要求。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
使用 AWSCLI或 建立自訂動作AWS CloudFormation。 | 此步驟涉及建立自訂來源動作,可用於特定區域中AWS您帳戶中管道的來源階段。您必須使用 AWSCLI或 AWS CloudFormation (而非主控台) 來建立自訂來源動作。如需有關此和其他 epics 中描述的命令和步驟的詳細資訊,請參閱此模式結尾的「相關資源」一節。在 AWS 中CLI create-custom-action-type,使用 命令。使用 --configuration-properties 提供作業工作者輪詢 CodePipeline 任務時處理所需的所有參數。請務必記下提供給 --provider 和 --action-version 選項的值,以便在使用此自訂來源階段建立管道時使用相同的值。您也可以AWS CloudFormation 使用資源類型 AWS::CodePipeline::CustomAction類型,在 中建立自訂來源動作。 | 一般 AWS |
任務 | 描述 | 所需的技能 |
---|---|---|
建立SSH金鑰對。 | 建立 Secure Shell (SSH) 金鑰對。如需指示,請參閱 GitHub 文件。 | 系統/DevOps 工程師 |
在 Secrets Manager 中建立AWS秘密。 | 從SSH金鑰對複製私有金鑰的內容,並在 AWS Secrets Manager 中建立秘密。存取 Git 儲存庫時,此秘密會用於身分驗證。 | 一般 AWS |
將公有金鑰新增至 Git 儲存庫。 | 將公有金鑰從SSH金鑰對新增至 Git 儲存庫帳戶設定,以針對私有金鑰進行身分驗證。 | 系統/DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
建立包含自訂來源動作的管道。 | 在 中建立管道 CodePipeline。當您設定來源階段時,請選擇您先前建立的自訂來源動作。您可以在AWS CodePipeline 主控台或 AWS CLI. CodePipeline prompts 中執行此操作,以設定您在自訂動作上設定的組態屬性。作業工作者需要此資訊,才能處理自訂動作的任務。遵循精靈並為管道建立下一個階段。 | 一般 AWS |
建立 CodePipeline Webhook。 | 為您使用自訂來源動作建立的管道建立 Webhook。您必須使用 AWSCLI或 AWS CloudFormation (而非主控台) 來建立 Webhook。在 AWS 中CLI,執行 put-webhook 命令,並為 webhook 選項提供適當的值。記下URL命令傳回的 Webhook。如果您使用 AWS CloudFormation 建立 Webhook,請使用 資源類型 AWS::CodePipeline::Webhook。請務必URL從建立的資源輸出 Webhook,並將其記下。 | 一般 AWS |
建立 Lambda 函數和 CodeBuild 專案。 | 在此步驟中,您可以使用 Lambda 和 CodeBuild 建立任務工作者,以 CodePipeline 輪詢自訂動作的任務請求、執行任務,並將狀態結果傳回 CodePipeline。當管道的自訂來源動作階段轉換為「進行中」時,建立由 Amazon CloudWatch Events 規則啟動的 Lambda 函數。啟動 Lambda 函數時,它應該透過輪詢任務來取得自訂動作任務詳細資訊。您可以使用 PollForJobs API來傳回此資訊。取得輪詢的任務資訊後,Lambda 函數應傳回確認,然後使用其從自訂動作的組態屬性取得的資料來處理資訊。當工作者準備好與 Git 儲存庫交談時,您可以啟動 CodeBuild 專案,因為使用SSH用戶端處理 Git 任務非常方便。 | 一般 AWS、程式碼開發人員 |
任務 | 描述 | 所需的技能 |
---|---|---|
建立 CloudWatch 事件規則。 | 建立 CloudWatch 事件規則,每當管道的自訂動作階段轉換為「進行中」時,就會啟動 Lambda 函數作為目標。 | 一般 AWS |
相關資源
在 中建立自訂動作 CodePipeline
設定身分驗證
建立管道和 Webhook
建立事件
其他參考