本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon ECS 上部署 Java 微服務的 CI/CD 管道
由 Vijay Thompson (AWS) 和 Sankar Sangubotla (AWS) 建立
Summary
此模式會引導您使用 AWS CodeBuild,在現有 Amazon Elastic Container Service (Amazon ECS) 叢集上部署 Java 微服務持續整合和持續交付 (CI/CD) 管道的步驟。當開發人員遞交變更時,會啟動 CI/CD 管道,並在 CodeBuild 中啟動建置程序。當組建完成時,成品會推送至 Amazon Elastic Container Registry (Amazon ECR),而來自 Amazon ECR 的最新組建則會被挑選並推送至 Amazon ECS 服務。
先決條件和限制
先決條件
在 Amazon ECS 上執行的現有 Java 微服務應用程式
熟悉 AWS CodeBuild 和 AWS CodePipeline
架構
來源技術堆疊
在 Amazon ECS 上執行的 Java 微服務
Amazon ECR 中的程式碼儲存庫
AWS Fargate
來源架構

目標技術堆疊
Amazon ECR
Amazon ECS
AWS Fargate
AWS CodePipeline
AWS CodeBuild
目標架構

自動化和擴展
CodeBuild buildspec.yml
檔案:
version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws --version - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email) - REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}') build: commands: - echo Build started on `date` - echo building the Jar file - mvn clean install - echo Building the Docker image... - docker build -t $REPOSITORY_URI:$BUILD_TAG . - docker tag $REPOSITORY_URI:$BUILD_TAG $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker images... - docker push $REPOSITORY_URI:$BUILD_TAG - docker push $REPOSITORY_URI:$IMAGE_TAG - echo Writing image definitions file... - printf '[{"name":"%s","imageUri":"%s"}]' $DOCKER_CONTAINER_NAME $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json - cat imagedefinitions.json artifacts: files: - imagedefinitions.json - target/DockerDemo.jar
工具
AWS 服務
AWS CodeBuild 是一種全受管的建置服務,可協助您編譯原始程式碼、執行單元測試,並產生準備好部署的成品。AWS CodeBuild 會持續擴展並同時處理多個組建,因此您的組建不會保留在佇列中。
AWS CodePipeline 可協助您快速建模和設定軟體版本的不同階段,並自動化持續發行軟體變更所需的步驟。您可以將 AWS CodePipeline 與 GitHub 等第三方服務整合,或使用 Amazon ECR 等 AWS 服務。
Amazon Elastic Container Registry (Amazon ECR) 是全受管登錄檔,可讓開發人員輕鬆存放、管理和部署 Docker 容器映像。Amazon ECR 已與 Amazon ECS 整合,以簡化您的development-to-production工作流程。Amazon ECR 會將您的映像託管在高可用性和可擴展的架構中,讓您可以可靠地為應用程式部署容器。與 AWS Identity and Access Management (IAM) 整合可提供每個儲存庫的資源層級控制。
Amazon Elastic Container Service (Amazon ECS) 高度可擴展的高效能容器協同運作服務,可支援 Docker 容器,並可讓您在 AWS 上輕鬆執行和擴展容器化應用程式。Amazon ECS 不需要您安裝和操作自己的容器協同運作軟體、管理和擴展虛擬機器叢集,或在這些虛擬機器上排程容器。
AWS Fargate 是 Amazon ECS 的運算引擎,可讓您執行容器,而無需管理伺服器或叢集。使用 AWS Fargate,您不再需要佈建、設定和擴展虛擬機器叢集來執行容器。這樣一來即無須選擇伺服器類型、決定何時擴展叢集,或最佳化叢集壓縮。
其他工具
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
建立 CodeBuild 組建專案。 | 在 AWS CodeBuild 主控台 | 應用程式開發人員、AWS 系統管理員 |
選取來源。 | 此模式使用 Git 做為程式碼儲存庫,因此請從可用選項清單中選擇 GitHub。從您的 GitHub 帳戶選擇公有儲存庫或 。 | 應用程式開發人員、AWS 系統管理員 |
選取儲存庫。 | 選取您要從中建置程式碼的儲存庫。 | 應用程式開發人員、AWS 系統管理員 |
選取環境。 | 您可以從受管映像清單中選擇,或使用 Docker 選擇自訂映像。此模式使用以下受管映像:
| 應用程式開發人員、AWS 系統管理員 |
選擇服務角色。 | 您可以建立服務角色,或從現有角色清單中選擇。 | 應用程式開發人員、AWS 系統管理員 |
新增環境變數。 | 在其他組態區段中,設定下列環境變數:
這些變數是 | 應用程式開發人員、AWS 系統管理員 |
建立 buildspec 檔案。 | 您可以在與 相同的位置建立 | 應用程式開發人員、AWS 系統管理員 |
設定專案的成品。 | (選用) 視需要設定成品的建置專案。 | 應用程式開發人員、AWS 系統管理員 |
設定 Amazon CloudWatch Logs。 | (選用) 視需要設定建置專案的 Amazon CloudWatch Logs。此步驟是選用的,但建議使用。 | 應用程式開發人員、AWS 系統管理員 |
設定 Amazon S3 日誌。 | (選用) 如果您想要存放日誌,請設定建置專案的 Amazon Simple Storage Service (Amazon S3) 日誌。 | 應用程式開發人員、AWS 系統管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
建立管道。 | 在 AWS CodePipeline 主控台 | 應用程式開發人員、AWS 系統管理員 |
選取服務角色。 | 建立服務角色,或從現有服務角色清單中選擇。如果您要建立服務角色,請提供角色的名稱,然後選取 CodePipeline 的選項來建立角色。 | 應用程式開發人員、AWS 系統管理員 |
選擇成品存放區。 | 在進階設定中,如果您希望 Amazon S3 建立儲存貯體並存放成品,請使用成品存放區的預設位置。或者,選取自訂位置並指定現有的儲存貯體。您也可以選擇使用加密金鑰來加密成品。 | 應用程式開發人員、AWS 系統管理員 |
指定來源提供者。 | 針對來源提供者,選擇 GitHub (第 2 版)。 | 應用程式開發人員、AWS 系統管理員 |
選取程式碼的儲存庫和分支。 | 如果您未登入,請提供連線至 GitHub 的連線詳細資訊,然後選取儲存庫名稱和分支名稱。 | 應用程式開發人員、AWS 系統管理員 |
變更偵測選項。 | 選擇在原始程式碼變更時啟動管道,然後移至下一頁。 | 應用程式開發人員、AWS 系統管理員 |
選取建置提供者。 | 針對建置提供者,選擇 AWS CodeBuild,然後提供建置專案的 AWS 區域和專案名稱詳細資訊。 針對建置類型,選擇單一建置。 | 應用程式開發人員、AWS 系統管理員 |
選擇部署提供者。 | 針對部署提供者,選擇 Amazon ECS。視需要選擇叢集名稱、服務名稱、映像定義檔案,以及部署逾時值。選擇 Create pipeline (建立管道)。 | 應用程式開發人員、AWS 系統管理員 |