

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

# 上的 CI/CD AWS
<a name="cicd-on-aws"></a>

CI/CD 可以繪製為管道，其中新程式碼在一端提交，透過一系列階段 （來源、建置、測試、預備和生產） 進行測試，然後發佈為生產就緒的程式碼。

![\[描述 AWS 程式碼管道範例的圖表\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/cicd_for_5g_networks_on_aws/images/cicd_5g2.png)


*CICD 管道概觀*

CI/CD 管道的每個階段都會在交付過程中建構為邏輯單位。每個階段都充當閘道，可對程式碼的特定層面進行審核。隨著程式碼經過管道，假設程式碼的品質在稍後階段會更高，因為會繼續驗證程式碼的更多層面。早期發現的問題會阻止程式碼透過管道進行。測試的結果會立即傳送給團隊，如果軟體未通過階段，所有進一步的建置和版本都會停止。

AWS 引進一組完整的 CI/CD 開發人員工具，以加速軟體開發和發行週期。每次程式碼變更時， 都會根據定義的發行模型，[AWS CodePipeline](https://aws.amazon.com/codepipeline/)自動化發行程序的建置、測試和部署階段。這可快速且可靠地交付功能和更新。

程式碼管道可以與其他 服務整合。這些可以是 AWS Services，例如 [Amazon Simple Storage Service](https://aws.amazon.com/s3/) (Amazon S3) 或第三方產品，例如 GitHub。 AWS CodePipeline 可以解決各種開發和操作使用案例，包括：
+ 使用 編譯、建置和測試程式碼 [AWS CodeBuild](https://aws.amazon.com/codebuild/)
+ 持續將容器型應用程式交付至雲端
+ 網路服務或特定雲端原生網路函數所需的成品 （例如描述項和容器映像） 部署前驗證
+ 容器化網路函數/虛擬網路函數 (CNF/VNF) 的功能、整合和效能測試，包括基準和迴歸測試
+ 可靠性和災難復原 (DR) 測試。

![\[描述 AWS CICD 管道元件的圖表\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/cicd_for_5g_networks_on_aws/images/cicd_5g3.png)


*AWS CICD 管道元件*

AWS 可以使用下列 AWS 開發人員工具設定 CI/CD 管道：
+ [AWS CodeCommit](https://aws.amazon.com/codecommit/)
+ [AWS CodeBuild](https://aws.amazon.com/codebuild/)
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
+ [AWS CodeDeploy](https://aws.amazon.com/codedeploy/)
+ [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/)
+ [AWS CodeStar](https://aws.amazon.com/codestar/)

可以使用 [AWS CDK](https://aws.amazon.com/cdk/)和 自動建立 CI/CD 管道[CloudFormation](https://aws.amazon.com/cloudformation/)。在 NFV 網域中，此 AWS 原生自動化可以整合到 Management and Orchestration (MANO) 架構和 CSP 的服務協同運作架構。

CI/CD 程序包含下列步驟：
+ 網路設定 – AWS CDK 並 CloudFormation 啟動建立網路先決條件：
+ 網路堆疊 (VPC、子網路、網路位址轉譯 (NAT) 閘道、路由表和網際網路閘道）
+ 基礎設施部署 – AWS CDK 並 CloudFormation 啟動建立下列資源堆疊：
+ 運算堆疊 ([Amazon Elastic Kubernetes Service](https://aws.amazon.com/eks/) (Amazon EKS) 叢集建立、EKS 工作者節點、[AWS Lambda](https://aws.amazon.com/lambda/))
+ 儲存堆疊 (Amazon S3 儲存貯體、[Amazon Elastic Block Store ](https://aws.amazon.com/ebs)(Amazon EBS) 磁碟區和 [ Amazon Elastic File System ](https://aws.amazon.com/efs/)(Amazon EFS) 
+ 監控堆疊 ([ CloudWatch ](https://aws.amazon.com/cloudwatch/)、[Amazon OpenSearch Service ](https://aws.amazon.com/opensearch-service/)(OpenSearch Service) 
+ 安全堆疊 ( [AWS Identity and Access Management](https://aws.amazon.com/iam/)(AWS IAM)、[Amazon Elastic Compute Cloud ](https://aws.amazon.com/ec2)(Amazon EC2) 安全群組、VPC [ 網路存取控制清單 ](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) NACLs) 
+ **雲端網路函數 (CNF) 部署 **– 在此階段，CNF 會使用 [ Kubectl ](https://kubernetes.io/docs/reference/kubectl/overview/) 和 Helm Charts 工具部署至 EKS 叢集。此階段也會部署 CNFs 所需的任何特定應用程式或工具，以有效率地運作 （例如 [ Prometheus ](https://prometheus.io/) [ 或 Fluentd](https://www.fluentd.org/))。CNFs可以透過 Lambda 函數或使用 進行部署 AWS CodeBuild。
+ 持續更新和部署 – 這些是一系列步驟，反覆執行以部署屬於容器/組態變更一部分的變更，進而導致升級。與 CNF 部署案例類似，透過 [AWS CodeCommit](https://aws.amazon.com/codecommit/)、[Amazon Elastic Container Registry ](https://aws.amazon.com/ecr/)(Amazon ECR) 或第三方來源系統的觸發條件，例如 [ GitLab Webhooks](https://docs.gitlab.com/ee/user/project/integrations/webhooks.html)，您可以使用 AWS Services 來自動化持續更新和部署。

![\[描述 AWS CICD 管道流程的圖表。\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/cicd_for_5g_networks_on_aws/images/cicd_5g4.png)


*AWS CICD 管道流程圖*

CI/CD 管道使用 建置[AWS CodePipeline](https://aws.amazon.com/codepipeline/)，並利用持續交付服務，以模型化、視覺化和自動化發行軟體所需的步驟。透過定義管道中的階段，您可以從原始程式碼儲存庫擷取程式碼、將該原始程式碼建置為可釋放成品、測試成品，並將其部署至生產環境。只會部署成功通過所有這些階段的程式碼。您可以選擇性地將其他需求新增至管道，例如手動核准，以協助確保僅將已核准的變更部署至生產環境。