在 中使用第三方 Git 來源儲存庫 AWS CodePipeline - AWS 方案指引

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

在 中使用第三方 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和 Atlassian Bitbucket 管理的 Git 儲存庫。不過,有些企業會使用與單一登入 (SSO) 服務和 Microsoft Active Directory 整合的第三方 Git 儲存庫進行身分驗證。您可以透過建立自訂動作和 Webhook CodePipeline ,使用這些第三方 Git 儲存庫作為 的來源。

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。

先決條件和限制

先決條件

  • 作用中AWS帳戶

  • 支援 Webhook 的 Git 儲存庫,可以透過URL網際網路連線至 CodePipeline Webhook

  • AWS 命令列介面 (AWS CLI) 已安裝設定以使用 AWS 帳戶

架構

模式涉及下列步驟:

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

  2. Git Webhook 稱為 。

  3. CodePipeline Webhook 稱為 。

  4. 管道設定為進行中 ,來源階段設定為進行中狀態。

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

  6. CloudWatch 事件會啟動 Lambda 函數。

  7. Lambda 函數會取得自訂動作任務的詳細資訊。

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

  9. CodeBuild 從 Secrets Manager 取得 HTTPS Git 存取的公有SSH金鑰或使用者憑證。

  10. CodeBuild 複製特定分支的 Git 儲存庫。

  11. CodeBuild 壓縮封存,並將其上傳至用作 CodePipeline 成品存放區的 S3 儲存貯體。

使用第三方 Git 來源儲存做為 來源的工作流程AWS CodePipeline。

工具

  • 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

建立事件

其他參考