使用 AWS DevOps 进行 CI/CD 部署
技术栈:AWS | CodeCommit | CodeArtifact | CodeBuild | CodeDeploy | CodePipeline | GitHub | EC2 | S3 | IAM。
搭建持续集成/持续交付 (CI/CD) 流程可能是一项繁琐的任务,需要花费大量时间才能创建一个完美运行、能够处理所有极端情况并最终整合所有代码的流水线。我们的代码库部署在 GitHub、GitLab、JIRA 等平台上,而 CI/CD 的部署则依赖于 Jenkins 等平台。将整个流水线拆分到多个平台上进行管理并非易事。
AWS 提供了一套完整的解决方案,用于在 AWS 内部创建和管理完整的 CI/CD 流水线。AWS 提供 CodePipe 用于创建流水线,CodeComit 用于管理代码库,CodeBuild 用于构建代码,CodeDeploy 用于将代码部署到各种环境中。它甚至还支持 Jenkins(如果您需要的话)。它支持服务器端和无服务器端两种部署方式。功能丰富,学习内容也很多。
方法
在 CodeComit 中创建代码库,并创建一个完整的 CI/CD 流水线,该流水线会在每次推送活动时读取源代码,构建应用程序,并最终部署应用程序。整个过程应实现自动化。
先决条件:
-
拥有具有相应访问权限的AWS账户。
-
而且,最重要的是,这篇博客需要您投入时间。在付诸实践之前,我恳请您完整阅读一遍。
PS:
-
在实验中,我采用“BLOG-CICD”这个名称。
-
实验结束后,请务必删除所有资源,否则会产生费用。
创建管道所需的步骤
步骤 1:添加凭据。
a:生成凭据。
b:添加权限。
步骤 2:创建用于部署的 EC2 机器。
步骤 3:为 CodeDeploy 创建 IAM 角色。
步骤 4:创建存储库。
步骤 5:将应用程序文件添加到存储库。
步骤 6:配置 CodeBuild。
步骤 7:配置 CodeDeploy。
步骤 8:创建代码管道。
步骤 9:故障排除
步骤 10:为应用程序打开端口。
现在,是时候开始动手实践了。祝您云游戏愉快!
步骤 1
首先,我们需要创建 CodeCommit 凭据,以便用户可以访问存储库,并且还需要允许这样做。
为 IAM 用户生成代码提交凭据:
-
转到 IAM 控制台。
-
点击您要授予权限的用户名。
-
点击
Security Credentials -
向下滚动并转到 HTTPS
Git credentials for AWS CodeCommit部分。 -
点击
Generate Credentials即可为该 IAM 用户创建代码提交凭据。
目前,我们已经为 IAM 用户创建了 CodeCommit 凭证。接下来,我们需要将代码提交策略附加到该用户。
-
转到 IAM 控制台。
-
单击您之前为其创建代码提交凭据的用户。
-
在“权限”选项卡下,转到“添加策略”。
-
查找
AWSCodeCommitPowerUser政策并添加。
步骤 2
如图所示,我们将应用程序部署在 EC2 服务器上。因此,我们需要为此创建一个 EC2 服务器。
请注意:大型实例会产生更多费用。对于本次实验,t2.micro 实例完全足够,它属于免费套餐服务。
服务器创建完成。开心😄!
步骤 3:为 AWS CodeDeploy 创建 IAM 角色,允许 CodeDeploy 调用其他 AWS 服务
-
转到 IAM 控制台。
-
点击左侧的“角色”。
-
点击“创建角色”。
-
选择 CodeDeploy 作为 AWS 服务。
-
向下滚动并选择 CodeDeploy 作为您的用例。
-
点击
Next: Tags -
点击
Next: Review -
给
Role name -
点击
Create role
第四步:在 AWS 中创建一个存储库来存储应用程序(或者,您也可以在 GitHub 上创建一个存储库)。
-
从 AWS 控制台转到该
CodeCommit服务。 -
请提供存储库名称。
-
可选:启用 Amazon CodeGuru 以验证代码质量。
-
复制仓库 URL 并将仓库克隆到本地系统。克隆时请使用上面生成的凭据。
第五步:将应用程序源文件添加到此存储库
将应用程序源代码添加到此仓库并推送。您可以在此处查看应用程序:
源代码包含两个重要文件
buildspec.yaml:appspec.yaml`.yml`buildspec.yaml文件包含创建生产版本的步骤,该版本将存储在代码工件中;`.yml` 文件appspec.yaml包含设置环境并在 EC2 实例上启动生产服务器的步骤。 如果您对 YAML 文件感到困惑,请
放心,我们将在后面的章节中讨论。
步骤 6:配置 CodeBuild
-
点击
Getting started代码构建下方的按钮。 -
点击创建项目。
-
请给项目命名。
-
Source provider在AWS CodeCommit来源部分选择。 -
选择您的存储库。
-
选择
Reference type为分支。 -
在“环境”部分下选择“环境”图像
- 我们可以使用 AWS 管理的操作系统镜像或自定义 Docker 镜像。
- 对于此管道,我使用的是 AWS 托管镜像。
-
选择您的操作系统。
- 注意:请确保它与 appspec.yaml 文件中提到的内容相同,我们将在代码部署步骤中使用该文件。
- 这里,我正在使用
Amazon Linux 2。
-
选择运行时为标准。
-
选择图像。就我而言,我使用的是
aws/codebuild/amazonlinux2-x86_64-standard:3.0
现在,请看配置规格部分。
- 这里我们有两种选择,要么将 buildspec.yaml 文件放在代码源中,要么直接在此控制台中定义管道配置。
注意:Buildspec文件是构建命令和相关设置的集合,采用 YAML 格式。
示例buildspec.yaml文件:
# Do not change version. This is the version of aws buildspec, not the version of your buildspec file.
version: 0.2
phases:
pre_build:
commands:
#installs dependencies
- "Commands for Installing Dependencies" ## E.g. npm install / pip install -r requirements.txt / etc.
build:
commands:
- echo Production Build started
- "Build Commands here" ## E.g. npm run build / python setup.py / etc.
post_build:
commands:
- echo Build completed
# Include build files required for your application to run.
artifacts:
files:
- "file names here" ## E.g. dist/*, appspec.yaml (make sure to include this one), build/*, etc.
以下是一个示例 appspec.yaml 文件,用于设置部署环境并启动应用程序:
# This is an appspec.yml template file for use with an EC2/On-Premises deployment in CodeDeploy.
version: 0.0
# Specify "os: linux" if this revision targets Amazon Linux
os: linux
# Place artifacts file inside EC2 instance
files:
- source: /
destination: /home/ec2-user/server
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
# During the BeforeInstall deployment lifecycle event, run the commands
# in the script specified in "location" which is under destination path.
BeforeInstall:
- location: relative_path_inside_your_project_folder/before_install.sh
timeout: 1000
runas: root
# During the AfterInstall deployment lifecycle event, run the commands
# in the script specified in "location".
AfterInstall:
- location: relative_path_inside_your_project_folder/after_install.sh
timeout: 1600
runas: root
# During the ApplicationStart deployment lifecycle event, run the commands
# in the script specified in "location".
ApplicationStart:
- location: relative_path_inside_your_project_folder/app_start.sh
timeout: 300
runas: root
-
这次部署我将使用 buildspec 文件。为此,我已经将 buildspec.yaml 文件保存在源代码中。如果您也打算使用 buildspec 文件
insert build commands option,只需在此处插入必要的命令,然后单击“继续到流水线”即可。 -
保持批处理配置和工件部分不变。
步骤 7:配置 CodeDeploy
-
点击
Getting StartedCodeDeploy。 -
点击
Create application。 -
请输入应用程序名称。
-
为您的管道选择计算平台。我将应用程序部署在 EC2 上,因此我选择此
EC2/On-premises选项。如果您想将应用程序部署在其他平台上,请相应地选择。
-
点击
Create application。 -
现在我们需要创建一个部署组。
-
对于部署组,我们将使用在前面步骤中创建的 EC2 实例。
-
点击“部署”组。
-
请提供部署名称。
-
选择您之前创建的服务角色。
-
选择部署类型为就地部署。
-
在环境配置中,选择
Amazon EC2 instances。 -
在这里,我们需要根据要部署应用程序的标签来搜索实例。我这里使用的是名称标签进行搜索。输入标签后,您可以看到匹配的实例数量。

-
接下来是“配置”部分
Agent configuration with AWS Systems Manager。我们需要在您的 EC2 实例上配置代码部署代理。您可以手动配置,但为什么要手动配置呢?AWS 会帮助我们完成这项工作。因此,在“配置”部分Agent configuration with AWS Systems Manage,选择“配置”选项Now and schedule updates。 -
此管道跳过负载均衡器。
-
最后,点击
Create Deployment Group
第 8 步:是时候建立一条管道了。
-
点击
Getting StartedCodePipeline 下方。 -
点击
Create pipeline。 -
请提供管道名称。
-
最好创建一个新的服务角色。选择一个新的服务角色。AWS 将创建一个具有所需权限的角色。
-
下一步,将源提供程序添加为 AWS CodeCommit。
-
请从下拉菜单中选择您的存储库名称。
-
请从下拉菜单中选择分行名称。
-
建议使用 Amazon CloudWatch Events 作为变更检测选项。
-
选择 CodePipeline 默认格式作为输出工件格式。
-
选择 AWS CodeBuild 作为构建提供程序。
-
请在此处核对您所在的地区。
-
选择您之前创建的项目。
-
选择构建类型为“单次构建”。
-
现在进入添加部署阶段。
-
选择部署提供程序为 AWS CodeDeploy。
-
请同时确认您的地区。
-
请从下拉菜单中选择您的应用程序。
-
选择之前创建的部署组。
-
最后,检查您的流程并点击
Create pipeline。
前往流水线,您可以看到流水线正在运行。请等待作业完成,这需要一些时间。如果作业成功完成,恭喜🎉,您已完成。
步骤 9:(可选):故障排除
如果您已成功完成以上步骤,那您真是幸运。如果任务失败,请不要担心。请尝试以下步骤进行故障排除。
故障排除 1:
-
请手动将代码部署代理配置到您的 EC2 实例。请查看以下步骤了解具体操作方法。
-
请逐条运行以下命令。
注意:我使用的是 Linux 系统。如果您使用的是其他操作系统,请按照以下步骤操作:安装代码并部署代理- 通过 SSH 连接到您的服务器。
sudo yum updatesudo yum install rubysudo yum install wgetcd /home/ec2-user-
使用以下命令下载代码部署代理。
wget https://<bucket-name>.s3.<region>-identifier.amazonaws.com/latest/install- 请务必根据您所在的区域,按照以下文档中提到的存储桶名称和区域名称进行替换。
- https://docs.aws.amazon.com/codedeploy/latest/userguide/resource-kit.html#resource-kit-bucket-names
-
使用以下命令运行安装脚本
chmod +x ./install
-
检查代码部署代理的状态。您将看到状态显示为“正在运行”。
sudo service codedeploy-agent status
-
如果程序没有运行,请使用以下命令使其运行。
sudo service codedeploy-agent status
-
再次触发管道并等待作业完成。
故障排除 2:
-
通过 SSH 连接到服务器,使用以下命令检查日志,并采取相应的措施。
tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log
故障排除 3:
- 请确保您已将 CodeDeploy、EC2 和 S3 的权限添加到部署中使用的 IAM 角色。
第十步
打开应用程序运行所在的端口。本应用程序使用的是 3000 端口。
如何打开:请查看上文中 EC2 创建过程中使用的安全步骤。
端口打开后,我们就可以通过服务器 DNS 访问应用程序了。尽情享用吧!😄
您已成功搭建完整的 CI/CD 流水线。希望您享受整个流水线创建过程🎉!
参考标题图片:https://exlskills.com/
文章来源:https://dev.to/shubhamkcloud/aws-codedeploy-ci-cd-4cld




















