

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# CI/CD 已开启 AWS
<a name="cicd-on-aws"></a>

CI/CD 可以描绘成一个管道，其中一端提交新代码，在一系列阶段（源代码、构建、测试、暂存和生产）进行测试，然后作为生产就绪代码发布。

![\[描绘 AWS 代码管道示例的示意图\]](http://docs.aws.amazon.com/zh_cn/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 服务可以是诸如[亚马逊简单存储服务](https://aws.amazon.com/s3/) (Amazon S3) 之类的服务，也可以是第三方产品，例如 GitHub。 AWS CodePipeline 可以解决各种开发和运营用例，包括：
+ 使用编译、构建和测试代码 [AWS CodeBuild](https://aws.amazon.com/codebuild/)
+ 将基于容器的应用程序持续交付到云端
+ 对网络服务或特定云原生网络功能所需的工件（例如描述符和容器映像）进行部署前验证
+ 容器化 function/virtual 网络功能 (CNF/VNF) 的功能、集成和性能测试，包括基线和回归测试
+ 可靠性和灾难恢复 (DR) 测试。

![\[描绘 AWS CICD 管道组件的示意图\]](http://docs.aws.amazon.com/zh_cn/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 原生自动化可以集成到管理和编排 (MANO) 框架和 CSP 的服务编排框架中。

该 CI/CD 过程包括以下步骤：
+ 网络设置 — AWS CDK 并 CloudFormation 启动网络先决条件的创建：
+ 网络堆栈（VPC、子网、网络地址转换 (NAT) 网关、路由表和互联网网关）
+ 基础设施部署 — AWS CDK 并 CloudFormation 启动以下资源堆栈的创建：
+ 计算堆栈（[亚马逊 Elastic Kubernetes Service（亚马逊 EK](https://aws.amazon.com/eks/) S）集群创建、EKS 工作节点等）[AWS Lambda](https://aws.amazon.com/lambda/)
+ 存储堆栈（亚马逊 S3 存储桶、[亚马逊弹性区块存储](https://aws.amazon.com/ebs) (Amazon EBS) 卷和[亚马逊弹性文件系统](https://aws.amazon.com/efs/) (Amazon EFS) 
+ 监控堆栈 ([ CloudWatch](https://aws.amazon.com/cloudwatch/)、[Amazon OpenSearch 服务](https://aws.amazon.com/opensearch-service/) (OpenSearch 服务) 
+ 安全堆栈 [AWS Identity and Access Management](https://aws.amazon.com/iam/)(AWS IAM)、[亚马逊弹性计算云](https://aws.amazon.com/ec2) (Amazon EC2) 安全组、VPC [网络访问控制列表](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) (NACLs) 
+ **云网络功能 (CNF) 部署** — 在此阶段，CNF 使用 [Kubectl 和 Helm 图表工具部署到 EK](https://kubernetes.io/docs/reference/kubectl/overview/) S 集群上。[此阶段还会部署高效工作所需的任何特定应用程序或工具（例如 Pro [metheus 或 Flu](https://prometheus.io/) entd）。 CNFs ](https://www.fluentd.org/) CNFs 既可以通过 Lambda 函数进行部署，也可以使用。 AWS CodeBuild
+ 持续更新和部署-这些步骤是以迭代方式执行的，用于部署变更，这些更改是导致升级的 container/configuration 变更的一部分。[与 CNF 部署案例类似，可以使用 AWS 服务自动进行持续更新和部署，触发器来自[AWS CodeCommit](https://aws.amazon.com/codecommit/)[亚马逊弹性容器注册表](https://aws.amazon.com/ecr/) (Amazon ECR) 或第三方源系统，例如 Webhooks GitLab 。](https://docs.gitlab.com/ee/user/project/integrations/webhooks.html)

![\[描绘 AWS CICD 管道流的示意图。\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/cicd_for_5g_networks_on_aws/images/cicd_5g4.png)


*AWS CICD 管道流程图*

该 CI/CD 管道是使用持续交付服务构建的 [AWS CodePipeline](https://aws.amazon.com/codepipeline/)，该服务可对发布软件所需的步骤进行建模、可视化和自动化。通过在管道中定义阶段，您可以从源代码存储库中检索代码，将该源代码构建到可发布的工件中，测试构件，然后将其部署到生产环境中。只有成功通过所有这些阶段的代码才会被部署。您可以选择在管道中添加其他要求，例如手动批准，以帮助确保只有经过批准的更改才会部署到生产中。