其他分享
首页 > 其他分享> > AWS 17 AWS_CICD_CodeCommit_CodePpelne_CodeBuild_CodeDeploy

AWS 17 AWS_CICD_CodeCommit_CodePpelne_CodeBuild_CodeDeploy

作者:互联网

AWS CICD
CodeCommit, CodePipeline代码管道, CodeBuild, CodeDeploy

CICD – Introduction

•我们已经学会了如何:
•手动创建AWS资源(基础)
•以编程方式与AWS交互(AWS CLI)
•使用Elastic Beanstalk将代码部署到AWS
•所有这些手动步骤都会让我们很容易出错!

•我们希望我们的代码“存储在存储库中”,并将其部署到AWS上
•自动
•正确的方式
•确保在部署前经过测试
•有可能进入不同阶段(开发、测试、分期、生产)
•在需要时手动批准
•要成为一名合格的AWS开发者,我们需要学习AWS CICD

本节主要介绍到目前为止我们已经完成的部署自动化同时增加了安全性

•我们将了解:
•AWS CodeCommit–存储我们的代码
•AWS CodePipeline–自动化我们从代码到弹性豆茎的管道
•AWS CodeBuild——构建和测试我们的代码
•AWS CodeDeploy–将代码部署到EC2实例(不是Elastic Beanstalk)
•AWS CodeStar–在一个地方管理软件开发活动
•AWS CodeArtifact–存储、发布和共享软件包
•AWS CodeGuru–使用机器学习的自动代码审查

持续集成(CI)
•开发人员将代码推送到一个存储库(例如GitHub、CodeCommit、Bitbucket等)
•测试/构建服务器在推送代码时立即检查代码(CodeBuild、Jenkins CI等)
•开发人员获得有关通过/失败的测试和检查的反馈
•尽早发现漏洞,然后修复漏洞
•在测试代码时更快地交付
•经常部署
•更快乐的开发者,因为他们不受阻碍

连续交付(CD)
•确保软件可以在需要时可靠发布
•确保部署频繁且快速
•从“每3个月发布一次”改为“每天发布5次”
•这通常意味着自动部署(例如CodeDeploy、Jenkins CD、,Spinnaker, …)
-------------------------------------------------------------------------------

AWS CodeCommit

•版本控制是指理解所发生的各种变化的能力随着时间的推移,代码发生了变化(可能会回滚)
•所有这些都是通过使用Git等版本控制系统实现的
•Git存储库可以在您的计算机上同步,但通常是同步的上传到中央在线存储库
•好处是:
•与其他开发人员合作
•确保代码已备份到某个地方
•确保其完全可视和可审核

•Git存储库可能很昂贵
•该行业包括GitHub、GitLab、Bitbucket等…
•和AWS CodeCommit:
•私有Git存储库
•存储库没有大小限制(无缝扩展)
•全面管理,高可用性
•仅在AWS云帐户中编码=>提高了安全性和法规遵从性
•安全性(加密、访问控制等)
•与Jenkins、AWS CodeBuild和其他CI工具集成

CodeCommit–安全

•使用Git(标准)进行交互
•认证
•SSH密钥–AWS用户可以在其IAM控制台中配置SSH密钥
•HTTPS–为IAM用户提供AWS CLI凭据帮助程序或Git凭据
•授权
•管理用户/角色对存储库的权限的IAM策略
•加密
•存储库使用AWS KMS在静止状态下自动加密
•在传输过程中加密(只能使用HTTPS或SSH,两者都是安全的)
•跨账户访问
•不要共享SSH密钥或AWS凭据
•在AWS账户中使用IAM角色,并使用AWS STS(假定角色API)AssumeRole API
-------------------------------------------------------------------------------

AWS代码管道
•协调CICD的可视化工作流程
•源代码–CodeCommit、ECR、S3、Bitbucket、GitHub
•构建——代码构建、詹金斯、云蜂、团队城市
•测试——代码构建、AWS设备场、第三方工具…
•部署——CodeDeploy、Elastic Beanstalk、CloudFormation、ECS、S3…
•包括以下几个阶段:
•每个阶段可以有顺序动作和/或并行动作
•示例:构建测试部署负载测试…
•可以在任何阶段定义手动批准

代码管道——工件
•每个管道阶段都可以创建工件
•存储在S3存储桶中并传递到下一阶段的工件

代码管道-故障排除
•对于代码管道/操作/阶段执行状态更改
•使用CloudWatch事件(Amazon EventBridge)。例子:
•您可以为发生故障的管道创建事件
•您可以为取消的阶段创建活动
•如果CodePipeline在某个阶段失败,您的管道将停止,您可以
控制台中的信息
•如果管道无法执行操作,请确保“IAM服务角色”
附件没有足够的IAM权限(IAM策略)
•AWS CloudTrail可用于审核AWS API调用

Technology Stack for CICD
-------------------------------------------------------------------------------
AWS代码构建
•全面管理的持续集成(CI)服务
•持续扩展(无需管理或调配服务器——无构建队列)
•编译源代码、运行测试、生成软件包…
•替代其他构建工具(如Jenkins)
•计算资源每分钟收费(完成构建所需的时间)
•利用引擎盖下的Docker实现可复制的构建
•使用预先打包的Docker图像或创建自己的自定义Docker图像
•安全:
•与KMS集成以加密构建工件
•IAM用于代码构建权限,VPC用于网络安全
•用于API调用日志记录的AWS CloudTrail

AWS代码构建
•源代码–CodeCommit、S3、Bitbucket、GitHub
•构建说明:代码文件buildspec.yml或在控制台中手动插入
•输出日志可以存储在Amazon S3和CloudWatch日志中
•使用CloudWatch指标监控构建统计数据
•使用CloudWatch事件检测失败的构建并触发通知
•如果需要故障的“阈值”,请使用CloudWatch警报进行通知
•构建项目可以在CodePipeline或CodeBuild中定义

CodeBuild–受支持的环境
• Java
• Ruby
• Python
• Go
• Node.js
• Android
• .NET Core
• PHP
•Docker–扩展您喜欢的任何环境

代码构建——buildspec.yml
•buildspec.yml文件必须位于代码的根目录下
•env–定义环境变量
•variables–纯文本变量
•parameter-stor–存储在SSM参数存储中的变量
•secrets-manager–存储在AWS机密管理器中的变量
•phases–指定要运行的命令:
•install–安装构建可能需要的依赖项
•pre_build–构建前执行的最终命令
•Build–实际的Build命令
•post_build——收尾工作(例如zip输出)
•artifacts——上传到S3的内容(用KMS加密)
•cache–要缓存的文件(通常是依赖项)到S3,以便未来建设加速

代码构建——本地构建
•如果需要日志之外的深层故障排除…
•您可以在桌面上本地运行CodeBuild(安装Docker后)
•为此,利用CodeBuild代理
• https://docs.aws.amazon.com/codebuild/latest/userguide/use-codebuildagent.html

代码构建——VPC内部
•默认情况下,代码构建容器是在VPC之外启动
•无法访问专有网络中的资源
•您可以指定专有网络配置:
•专有网络ID
•子网ID
•安全组ID
•然后您的构建可以访问您的应用程序中的资源VPC(例如RDS、ElastiCache、EC2、ALB等)

•用例:集成测试、数据查询、内部负载平衡器,
-------------------------------------------------------------------------------

AWS代码部署
•我们希望将应用程序自动部署到许多EC2实例
•这些EC2实例不是由Elastic Beanstalk管理的
•有几种使用开源工具处理部署的方法(Ansible, Terraform, Chef, Puppet, …)
•我们可以使用托管服务AWS CodeDeploy

CodeDeploy–使其工作的步骤
•每个EC2实例/本地服务器必须运行CodeDeploy代理
•代理不断轮询AWS CodeDeploy以完成工作
•应用程序+appspec.yml从GitHub或S3中提取
•EC2实例将运行appspec.yml中的部署说明
•CodeDeploy代理将报告部署的成功/失败

CodeDeploy–主要组件
•Application–唯一的名称用作容器(修订版、部署配置等)
•Compute Platform——EC2/On-Premise、AWS Lambda或亚马逊ECS
•Deployment Configuration–一组成功/失败的部署规则
•EC2/On-premises –指定部署的最小健康实例数
•AWS Lambda or Amazon ECS –指定如何将流量路由到更新版本

•Deployment Group-标记的EC2实例组(允许逐步部署,或开发、测试、生产…)
•部署类型–用于将应用程序部署到部署组的方法
•就地部署——支持EC2/现场部署
•蓝色/绿色部署–仅支持EC2实例、AWS Lambda和Amazon ECS
•IAM Instance Profile–授予EC2实例访问S3/GitHub的权限
•Application Revision——应用程序代码+appspec.yml文件
•Service Role–CodeDeploy的IAM角色,用于在EC2实例、ASG、ELBs上执行操作…
•Target Revision–要部署到部署组的最新修订版

CodeDeploy–appspec.yml
•files–如何从S3中获取和复制/GitHub到文件系统
•source
•destination
•挂钩–部署时需要执行的一组说明新版本(钩子可以有超时),命令如下:
• ApplicationStop
• DownloadBundle
• BeforeInstall
• Install
• AfterInstall
• ApplicationStart
• ValidateService <= important!!

CodeDeploy–部署配置

•配置:
•One At A Time–一次一个EC2实例,如果一个实例失败,则部署停止
•Half At A Time–50%
•All At Once–快速但没有健康的主机,停机。对dev有好处
•Custom–最小健康主机=75%
•故障:
•EC2实例保持“失败”状态
•新部署将首先部署到失败的实例
•要回滚,请重新部署旧部署或启用故障自动回滚
•部署小组:
•一组标记的EC2实例
•直接联系ASG
•ASG/标签的混合,因此您可以构建部署段
•使用DEPLOYMENT_GROUP_NAME环境变量在脚本中进行自定义

CodeDeploy – Deployment to EC2
•定义如何使用appspec部署appspec.yml+部署策略
•将对您的EC2实例群进行就地更新
•可以在每个部署阶段后使用钩子验证部署

CodeDeploy–部署到ASG
•就地部署
•更新现有EC2实例 Half At A Time
•新创建的EC2实例ASG也将实现自动化部署
•蓝色/绿色部署
•创建一个新的自动缩放组(复制设置)
•选择将旧款保留多长时间EC2实例(旧ASG)
•必须使用ELB

CodeDeploy–重新部署和回滚
•回滚=重新部署以前部署的应用程序版本
•部署可以回滚:
•自动–部署失败时回滚或满足CloudWatch警报阈值
•手动
•禁用回滚-不为此部署执行回滚
•如果发生回滚,CodeDeploy将重新部署最后一个已知的良好状态
作为新部署进行修订(不是还原版本)
-------------------------------------------------------------------------------

AWS代码星

•一个集成的解决方案,包括:GitHub、CodeCommit、CodeBuild、,
CodeDeploy、CloudFormation、CodePipeline、CloudWatch…
•为EC2、Lambda、Elastic Beanstalk快速创建“CICD就绪”项目
•支持的语言:C#、Go、HTML5、Java、Node。js、PHP、Python、Ruby
•问题跟踪与JIRA/GitHub问题的集成
•能够与Cloud9集成以获得web IDE(并非所有地区)
•一个仪表板,用于查看所有组件
•免费服务,仅为其他服务的潜在使用付费
•有限的定制
-------------------------------------------------------------------------------

AWS代码工件
•要构建的软件包相互依赖(也称为代码依赖项),并创建新的依赖项
•存储和检索这些依赖关系称为工件管理
•传统上,您需要设置自己的工件管理系统
•CodeArtifact是一种安全、可扩展且经济高效的产品软件开发管理
•与常见的依赖关系管理工具,如Gradle, npm, yarn, twine, pip, and NuGet
•开发者和代码构建可以直接检索依赖项来自代码工件。

亚马逊代码专家 Amazon CodeGuru
•以ML为动力的服务,用于自动代码审查和应用性能建议
•提供两种功能
•CodeGuru Reviewer:用于静态代码分析(开发)的自动代码评审
•CodeGuru Profiler:运行时(生产)应用程序性能的可见性/建议

亚马逊代码专家评论员 CodeGuru Reviewer
•识别关键问题、安全漏洞和难以发现的漏洞
•示例:通用编码最佳实践、资源泄漏、安全检测、输入验证
•使用机器学习和自动推理
•在1000多个开源和Amazon存储库上进行的数百万次代码评审中,我们学到了一些刻骨铭心的经验教训
•支持Java和Python
•与GitHub、Bitbucket和AWS CodeCommit集成

亚马逊代码专家剖析器 CodeGuru Profiler

•有助于了解your application的运行时行为
•示例:确定您的应用程序是否正在使用日志例程上的CPU容量过大
•特点:
•识别并消除代码效率低下
•提高应用程序性能(例如,减少CPU利用率)
•降低计算成本
•提供堆摘要(确定哪些对象使用向上移动内存)
•异常检测
•支持在AWS或onpremise上运行的应用程序
•最小的应用程序开销

-------------------------------------------------------------------------------

标签:17,部署,CICD,代码,AWS,CodeDeploy,构建,EC2
来源: https://www.cnblogs.com/ives-xu/p/16133460.html