本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon ECS 上部署適用於 Java 微服務的 CI/CD 管道
由維傑·湯普森(AWS)和桑卡爾桑格博特拉(AWS)創建
環境:PoC 或試點 | 技術: DevOps;容器與微服務 | AWS 服務:AWS CodeBuild;Amazon EC2 容器註冊表;Amazon ECS;AWS Fargate;AWS CodePipeline |
Summary
此模式會引導您完成使用 AWS 在現有 Amazon 彈性容器服務 (Amazon ECS) 叢集上為 Java 微服務部署持續整合和持續交付 (CI/CD) 管道的步驟。 CodeBuild當開發人員提交更改時,會啟動 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,或使用 AWS 服務 (例如 AWS CodeCommit 或 Amazon ECR)。
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 系統管 |
創建一個構建規格文件。 | 您可以在 | 應用程式開發人員、AWS 系統管 |
設定專案的人工因素。 | (選擇性) 視需要設定成品的建置專案。 | 應用程式開發人員、AWS 系統管 |
設定 Amazon CloudWatch 日誌。 | (選擇性) 視需要為建置專案設定 Amazon CloudWatch 日誌。此步驟為選用步驟,但建議使用。 | 應用程式開發人員、AWS 系統管 |
設定 Amazon S3 日誌。 | (選用) 如果您想要存放日誌,請為建置專案設定 Amazon 簡單儲存服務 (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 系統管 |