本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
自動建立 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 使用者以 JSON 格式提供 CI 管道建立的輸入參數。此輸入會啟動 Step Functions 工作流程 (狀態機器 ),該工作流程使用AWS開發人員工具建立 CI 管道。
Lambda 函數會讀取名為 input-reference 的資料夾,該資料夾存放在 Amazon S3 儲存貯體中,然後產生 buildspec.yml 檔案。此產生的檔案會定義 CI 管道階段,並存放在存放參數參考的相同 Amazon S3 儲存貯體中。
Step Functions 會檢查 CI 管道建立工作流程的相依性是否有任何變更,並視需要更新相依性堆疊。
Step Functions 在 CloudFormation 堆疊中建立 CI 管道資源,包括 CodeCommit 儲存庫、 CodeBuild 專案和 CodePipeline 管道。
CloudFormation 堆疊會將所選技術堆疊 (Java 或 Python) 的範例原始碼和 buildspec.yml 檔案複製到 CodeCommit 儲存庫。
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 範本或 Step Functions 動作組態中輸入憑證 (秘密 ),例如權杖或密碼。如果您這樣做,資訊會顯示在 DynamoDB 日誌中。反之,請使用 AWS Secrets Manager 來設定和儲存秘密。然後,視需要參考 CloudFormation 範本和 Step Functions 動作組態中存放在 Secrets Manager 中的秘密。如需詳細資訊,請參閱 AWS Secrets Manager 文件中的什麼是 Secrets Manager。
針對存放在 Amazon S3 中的 CodePipeline 成品設定伺服器端加密。如需詳細資訊,請參閱 CodePipeline 文件中設定 Amazon S3 中存放成品的伺服器端加密 CodePipeline。
設定IAM角色時套用最低權限許可。如需詳細資訊,請參閱 IAM 文件中的套用最低權限許可。
請確定您的 Amazon S3 儲存貯體不可公開存取。如需詳細資訊,請參閱 Amazon S3 S3 文件中的設定 S3 儲存貯體的區塊公有存取設定。
請務必為 Amazon S3 儲存貯體啟用版本控制。如需詳細資訊,請參閱 Amazon S3 文件中的在 S3 儲存貯體中使用版本控制。 Amazon S3
設定IAM政策時使用 IAM Access Analyzer。該工具提供可行的建議,協助您撰寫安全且實用的IAM政策。如需詳細資訊,請參閱 IAM 文件中的使用 AWS Identity and Access Management Access Analyzer。
盡可能在設定IAM政策時定義特定存取條件。
啟用 Amazon CloudWatch 記錄以進行監控和稽核。如需詳細資訊,請參閱 CloudWatch 文件中的什麼是 Amazon CloudWatch Logs?。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
建立 Amazon S3 儲存貯體。 | 建立 Amazon S3 儲存貯體 (或使用現有儲存貯體),以存放解決方案所需的 CloudFormation 範本、原始程式碼和輸入檔案。 如需詳細資訊,請參閱 Amazon S3 文件中的步驟 1:建立第一個 S3 儲存貯體。 Amazon S3 注意:Amazon S3 儲存貯體必須位於您要部署解決方案的相同AWS區域中。 | AWS DevOps |
複製 GitHub 儲存庫。 | 在終端機視窗中執行下列命令來複製 GitHub automated-ci-pipeline-creation
如需詳細資訊,請參閱文件中的複製儲存庫 | AWS DevOps |
將解決方案範本資料夾從複製的 GitHub 儲存庫上傳至您的 Amazon S3 儲存貯體。 | 從複製的 Solution-Templates 資料夾複製內容,並將其上傳至您建立的 Amazon S3 儲存貯體。 如需詳細資訊,請參閱 Amazon S3 文件中的上傳物件。 Amazon S3 注意:請確定您僅上傳 Solution-Templates 資料夾的內容。您只能在 Amazon S3 儲存貯體的根層級上傳檔案。 | AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
使用複製儲存 GitHub 庫中的 template.yml 檔案建立 CloudFormation 堆疊以部署解決方案。 |
注意:建立堆疊時,堆疊頁面上會列出狀態為 CREATE_IN_PROGRESS 的堆疊。請務必等待堆疊的狀態變更為 CREATE_COMPLETE,然後再完成此模式中的剩餘步驟。 | AWS 管理員、 AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
執行您建立的步驟函數。 |
JSON 格式設定
Java JSON輸入範例
Python JSON輸入範例
| AWS 管理員、 AWS DevOps |
確認 CI 管道的 CodeCommit 儲存庫已建立。 |
| AWS DevOps |
檢查 CodeBuild 專案資源。 |
| AWS DevOps |
驗證 CodePipeline 階段。 |
| AWS DevOps |
確認 CI 管道已成功執行。 |
| AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
刪除 中的資源堆疊 CloudFormation。 | 在 中刪除 CI 管道的資源堆疊 CloudFormation。 如需詳細資訊,請參閱 CloudFormation 文件中的刪除AWS CloudFormation 主控台上的堆疊。 注意:請務必刪除名為 <project_name>-stack 的堆疊。 | AWS DevOps |
在 Amazon S3 和 中刪除 CI 管道的相依性 CloudFormation。 |
注意:請確定您刪除名為 的堆疊pipeline-creation-dependencies-stack。 | AWS DevOps |
刪除 Amazon S3 範本儲存貯體。 | 刪除您在此模式的設定先決條件區段中建立的 Amazon s3 儲存貯體,該區段存放此解決方案的範本。 如需詳細資訊,請參閱 Amazon S3 文件中的刪除儲存貯體。 | AWS DevOps |
相關資源
建立使用 Lambda 的 Step Functions 狀態機器 (AWS Step Functions 文件)
AWS Step Functions WorkFlow Studio (AWSStep Functions 文件)
如何AWS CloudFormation 運作? (AWS CloudFormation 文件)
使用 AWS CodeCommit、AWS CodeBuild、 AWS CodeDeploy和 ( 部落格文章) 完成 CI/CD AWS CodePipeline
AWS IAM 和配額、名稱要求和字元限制 AWS STS (IAM 文件)