自動建立 Java 和 Python 專案的動態 CI 管道 - AWS 方案指引

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

自動建立 Java 和 Python 專案的動態 CI 管道

由 Aromal Raj Jayarajan (AWS)、Amarnath Reddy (AWS)、MAHESHRAGHUNANDANAN(AWS) 和 Vijesh Vijayakumaran Nair (AWS) 建立

程式碼儲存庫: automated-ci-pipeline-creation

環境:PoC 或試行

技術: DevOps;基礎設施;無伺服器

工作負載:所有其他工作負載

AWS 服務:AWS CodeBuild;AWS CodePipeline;AWSLambda;AWSStep Functions; AWS CodeCommit

Summary

請注意: AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可以繼續正常使用服務。進一步了解

此模式說明如何使用AWS開發人員工具,為 Java 和 Python 專案自動建立動態持續整合 (CI) 管道。

隨著技術堆疊多樣化和開發活動增加,建立和維護跨組織一致 CI 管道變得困難。透過在 AWS Step Functions 中自動化程序,您可以確保 CI 管道的使用和方法一致。

若要自動建立動態 CI 管道,此模式會使用下列變數輸入:

  • 程式設計語言 (僅限 Java 或 Python)

  • 管道名稱

  • 所需的管道階段

注意:Step Functions 會使用多個 AWS 服務來協調管道建立。如需此解決方案中使用的AWS服務的詳細資訊,請參閱此模式的工具區段。

先決條件和限制

先決條件

  • 作用中AWS帳戶

  • 部署此解決方案之相同AWS區域中的 Amazon S3 儲存貯體

  • Identity AWS and Access Management (IAM) 主體具有建立此解決方案所需資源所需的AWS CloudFormation 許可

限制

  • 此模式僅支援 Java 和 Python 專案。

  • 在此模式中佈建IAM的角色遵循最低權限原則。IAM 角色的許可必須根據 CI 管道需要建立的特定資源更新。

架構

目標技術堆疊

  • AWS CloudFormation

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • IAM

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Systems Manager

  • AWS Step Functions

  • AWS Lambda

  • Amazon DynamoDB

目標架構

下圖顯示使用AWS開發人員工具自動建立 Java 和 Python 專案動態 CI 管道的範例工作流程。

使用 AWS 工具自動建立 Java 和 Python 專案動態 CI 管道的工作流程。

該圖顯示以下工作流程:

  1. AWS 使用者以 JSON 格式提供 CI 管道建立的輸入參數。此輸入會啟動 Step Functions 工作流程 (狀態機器 ),該工作流程使用AWS開發人員工具建立 CI 管道。

  2. Lambda 函數會讀取名為 input-reference 的資料夾,該資料夾存放在 Amazon S3 儲存貯體中,然後產生 buildspec.yml 檔案。此產生的檔案會定義 CI 管道階段,並存放在存放參數參考的相同 Amazon S3 儲存貯體中。

  3. Step Functions 會檢查 CI 管道建立工作流程的相依性是否有任何變更,並視需要更新相依性堆疊。

  4. Step Functions 在 CloudFormation 堆疊中建立 CI 管道資源,包括 CodeCommit 儲存庫、 CodeBuild 專案和 CodePipeline 管道。

  5. CloudFormation 堆疊會將所選技術堆疊 (Java 或 Python) 的範例原始碼和 buildspec.yml 檔案複製到 CodeCommit 儲存庫。

  6. CI 管道執行期詳細資訊會儲存在 DynamoDB 資料表中。

自動化和擴展

  • 此模式僅適用於單一開發環境。在多個開發環境中使用時,需要變更組態。

  • 若要新增對多個 CloudFormation 堆疊的支援,您可以建立其他 CloudFormation 範本。如需詳細資訊,請參閱 CloudFormation 文件中的入門AWS CloudFormation

工具

工具

  • AWS Step Functions 是一種無伺服器協調服務,可協助您結合 AWS Lambda 函數和其他AWS服務來建置業務關鍵型應用程式。

  • AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。

  • AWS CodeBuild 是一項完全受管的建置服務,可協助您編譯原始程式碼、執行單位測試,並產生準備好部署的成品。

  • AWS CodeCommit 是一種版本控制服務,可協助您私有儲存和管理 Git 儲存庫,而無需管理您自己的來源控制系統。

  • AWS CodePipeline 可協助您快速建模和設定軟體版本的不同階段,並自動執行持續發行軟體變更所需的步驟。

  • AWS Identity and Access Management (IAM) 可協助您安全地管理 AWS 資源的存取,方法是控制誰經過身分驗證並獲授權使用。

  • AWS Key Management Service (AWS KMS) 可協助您建立和控制密碼編譯金鑰,以協助保護您的資料。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

  • AWS CloudFormation 可協助您設定AWS資源、快速且一致地佈建資源,並在其整個生命週期內跨AWS帳戶和區域進行管理。

  • Amazon DynamoDB 是完全受管的無SQL資料庫服務,可提供快速、可預測且可擴展的效能。

  • AWS Systems Manager 參數存放區為組態資料管理和秘密管理提供安全的階層式儲存。

Code

此模式的程式碼可在 儲存庫中使用 GitHub automated-ci-pipeline-creation。儲存庫包含建立此模式中概述的目標架構所需的 CloudFormation 範本。

最佳實務

史詩

任務描述所需的技能

建立 Amazon S3 儲存貯體。

建立 Amazon S3 儲存貯體 (或使用現有儲存貯體),以存放解決方案所需的 CloudFormation 範本、原始程式碼和輸入檔案。

如需詳細資訊,請參閱 Amazon S3 文件中的步驟 1:建立第一個 S3 儲存貯體。 Amazon S3

注意Amazon S3 儲存貯體必須位於您要部署解決方案的相同AWS區域中。

AWS DevOps

複製 GitHub 儲存庫。

在終端機視窗中執行下列命令來複製 GitHub automated-ci-pipeline-creation儲存庫:

git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git

如需詳細資訊,請參閱文件中的複製儲存庫 GitHub 。

AWS DevOps

將解決方案範本資料夾從複製的 GitHub 儲存庫上傳至您的 Amazon S3 儲存貯體。

從複製的 Solution-Templates 資料夾複製內容,並將其上傳至您建立的 Amazon S3 儲存貯體。

如需詳細資訊,請參閱 Amazon S3 文件中的上傳物件。 Amazon S3

注意:請確定您僅上傳 Solution-Templates 資料夾的內容。您只能在 Amazon S3 儲存貯體的根層級上傳檔案。

AWS DevOps
任務描述所需的技能

使用複製儲存 GitHub 庫中的 template.yml 檔案建立 CloudFormation 堆疊以部署解決方案。

  1. 登入 AWS 管理主控台,然後開啟AWS CloudFormation 主控台

  2. 選擇建立堆疊。下拉式清單隨即出現。

  3. 在下拉式清單中,選取使用新資源 (標準)建立堆疊頁面隨即開啟。

  4. 指定範本區段中,選取上傳範本檔案 旁的核取方塊。

  5. 選取 Choose file (選擇檔案)。然後,導覽至複製 GitHub 儲存庫的根資料夾,然後選取 template.yml 檔案。然後選擇 Open (開啟)

  6. 選擇 Next (下一步)。此時會開啟指定堆疊詳細資訊頁面。

  7. 參數區段中,指定下列參數:

    • 針對 S3TemplateBucketName,輸入您先前建立的 Amazon S3 儲存貯體名稱,其中包含此解決方案的原始程式碼和參考。確定儲存貯體名稱參數為小寫。

    • 對於 D ynamoDBTable,輸入 CloudFormation 堆疊建立的 DynamoDB 資料表名稱。

    • 針對 StateMachineName,輸入 CloudFormation 堆疊建立之 Step Functions 狀態機器的名稱。

  8. 選擇 Next (下一步)設定堆疊選項頁面隨即開啟。

  9. Configure stack options (設定堆疊選項) 頁面,選擇 Next (下一步)。請勿變更任何預設值。檢閱頁面隨即開啟。

  10. 檢閱堆疊建立設定。然後選擇建立堆疊以啟動您的堆疊。

注意:建立堆疊時,堆疊頁面上會列出狀態為 CREATE_IN_PROGRESS堆疊。請務必等待堆疊的狀態變更為 CREATE_COMPLETE,然後再完成此模式中的剩餘步驟。

AWS 管理員、 AWS DevOps
任務描述所需的技能

執行您建立的步驟函數。

  1. 登入 AWS 管理主控台,然後開啟 Step Functions 主控台

  2. 開啟您建立的步驟函數。

  3. 選擇 Start execution (開始執行)。然後,以 JSON 格式輸入工作流程的輸入值 (請參閱下列範例輸入)。

  4. 選擇 Start execution (開始執行)

JSON 格式設定

{ "details": { "tech_stack": "Name of the Tech Stack (python/java)", "project_name": "Name of the Project that you want to create with", "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no", } }

Java JSON輸入範例

{ "details": { "tech_stack": "java", "project_name": "pipeline-java-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }

Python JSON輸入範例

{ "details": { "tech_stack": "python", "project_name": "pipeline-python-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }
AWS 管理員、 AWS DevOps

確認 CI 管道的 CodeCommit 儲存庫已建立。

  1. 登入 AWS 管理主控台,然後開啟CodeCommit 主控台

  2. 儲存庫頁面上,確認您建立的 CodeCommit 儲存庫名稱出現在儲存庫清單中。儲存庫的名稱會附加於下列項目:pipeline-java-pjt-Repo

  3. 開啟 CodeCommit 儲存庫,並驗證範例原始程式碼與 buildspec.yml 檔案是否一起推送至主分支。

AWS DevOps

檢查 CodeBuild 專案資源。

  1. 登入 AWS 管理主控台,然後開啟CodeBuild 主控台

  2. 建置專案頁面上,確認您建立的 CodeBuild 專案名稱出現在專案清單中。專案的名稱會附加於下列項目:pipeline-java-pjt-Build

  3. 選取 CodeBuild 專案的名稱以開啟專案。然後,檢閱並驗證下列組態:

    • 專案組態

    • 來源

    • Environment (環境)

    • Buildspec

    • 批次組態

    • 偽影

AWS DevOps

驗證 CodePipeline 階段。

  1. 登入 AWS 管理主控台,然後開啟CodePipeline 主控台

  2. 管道頁面上,確認您建立的管道名稱出現在管道清單中。管道的名稱會附加於下列項目:pipeline-java-pjt-Pipeline

  3. 選取管道的名稱以開啟管道。然後,檢閱並驗證管道的每個階段,包括 CommitDeploy

AWS DevOps

確認 CI 管道已成功執行。

  1. CodePipeline 主控台 管道頁面上,選取要檢視管道狀態的管道名稱。

  2. 確認管道的每個階段都有成功狀態。

AWS DevOps
任務描述所需的技能

刪除 中的資源堆疊 CloudFormation。

在 中刪除 CI 管道的資源堆疊 CloudFormation。

如需詳細資訊,請參閱 CloudFormation 文件中的刪除AWS CloudFormation 主控台上的堆疊

注意:請務必刪除名為 <project_name>-stack 的堆疊。

AWS DevOps

在 Amazon S3 和 中刪除 CI 管道的相依性 CloudFormation。

  1. 清空名為 的 Amazon S3 儲存貯體DeploymentArtifactBucket。如需詳細資訊,請參閱 Amazon S3 文件中的清空儲存貯體。 Amazon S3

  2. 在 中刪除 CI 管道的相依性堆疊 CloudFormation。如需詳細資訊,請參閱 CloudFormation 文件中的刪除AWS CloudFormation 主控台上的堆疊

注意:請確定您刪除名為 的堆疊pipeline-creation-dependencies-stack

AWS DevOps

刪除 Amazon S3 範本儲存貯體。

刪除您在此模式的設定先決條件區段中建立的 Amazon s3 儲存貯體,該區段存放此解決方案的範本。

如需詳細資訊,請參閱 Amazon S3 文件中的刪除儲存貯體。

AWS DevOps

相關資源