本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
自動為 Java 和 Python 專案建立動態 CI 管道
由 Aromal Raj Jayarajan (AWS)、Amarnath Reddy (AWS)、MAHESH RAGHUNANDANAN (AWS) 和 Vijesh Vijayakumaran Nair (AWS) 建立
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 儲存貯體
具有建立此解決方案所需資源所需的 AWS CloudFormation 許可的 AWS Identity and Access Management (IAM) 主體
限制
此模式僅支援 Java 和 Python 專案。
在此模式中佈建的 IAM 角色遵循最低權限原則。必須根據 CI 管道需要建立的特定資源更新 IAM 角色的許可。
架構
目標技術堆疊
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 入門。 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 是一項全受管 NoSQL 資料庫服務,可提供快速、可預期且可擴展的效能。
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 for CodePipeline 中成品的伺服器端加密 CodePipeline。 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?。 CloudWatch
史詩
任務 | 描述 | 所需技能 |
---|---|---|
建立 Amazon S3 儲存貯體。 | 建立 Amazon S3 儲存貯體 (或使用現有的儲存貯體),以存放解決方案所需的 CloudFormation 範本、原始程式碼和輸入檔案。 如需詳細資訊,請參閱 Amazon S3 文件中的步驟 1:建立您的第一個 S3 儲存貯體。 Amazon S3 注意Amazon S3 儲存貯體必須位於您要部署解決方案的相同 AWS 區域。 | AWS DevOps |
複製 GitHub 儲存庫。 | 在終端機視窗中執行下列命令,複製 GitHub automated-ci-pipeline-creation
如需詳細資訊,請參閱 GitHub 文件中的複製儲存庫 | AWS DevOps |
將解決方案範本資料夾從複製的 GitHub 儲存庫上傳至您的 Amazon S3 儲存貯體。 | 從複製的 Solution-Templates 資料夾複製內容,並將其上傳至您建立的 Amazon S3 儲存貯體。 如需詳細資訊,請參閱 Amazon S3 文件中的上傳物件。 Amazon S3 注意請務必僅上傳 Solution-Templates 資料夾的內容。您只能在 Amazon S3 儲存貯體的根層級上傳檔案。 | AWS DevOps |
任務 | 描述 | 所需技能 |
---|---|---|
在複製的 GitHub 儲存庫中使用 template.yml 檔案,建立 CloudFormation 堆疊來部署解決方案。 |
注意建立堆疊時,它會列在 Stacks 頁面上,狀態為 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 中的資源堆疊。 | 在 CloudFormation 中刪除 CI 管道的資源堆疊。 如需詳細資訊,請參閱 CloudFormation 文件中的刪除 AWS CloudFormation 主控台上的堆疊。 CloudFormation 注意請務必刪除名為 <project_name>-stack 的堆疊。 | AWS DevOps |
在 Amazon S3 和 CloudFormation 中刪除 CI 管道的相依性。 |
注意請務必刪除名為 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 (AWS Step Functions 文件)
AWS CloudFormation 如何運作? (AWS CloudFormation 文件)
使用 AWS CodeCommit、AWS CodeBuild、AWS CodeDeploy 和 AWS CodePipeline 完成 CI/CD
(AWS 部落格文章) IAM 和 AWS STS 配額、名稱要求和字元限制 (IAM 文件)