发布于 2026-01-06 1 阅读
0

使用 AWS DevOps 进行 CI/CD 部署

使用 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

  • 向下滚动并转到 HTTPSGit credentials for AWS CodeCommit部分。

  • 点击Generate Credentials即可为该 IAM 用户创建代码提交凭据。

目前,我们已经为 IAM 用户创建了 CodeCommit 凭证。接下来,我们需要将代码提交策略附加到该用户。

  • 转到 IAM 控制台。

  • 单击您之前为其创建代码提交凭据的用户。

  • 在“权限”选项卡下,转到“添加策略”。

  • 查找AWSCodeCommitPowerUser政策并添加。

步骤 2

如图所示,我们将应用程序部署在 EC2 服务器上。因此,我们需要为此创建一个 EC2 服务器。

  • 转到 EC2 控制台。

  • 点击午餐实例。

  • 如图所示搜索 Linux,然后点击选择。
    替代文字

  • 请在此处选择实例类型。

请注意:大型实例会产生更多费用。对于本次实验,t2.micro 实例完全足够,它属于免费套餐服务。

  • 点击next
    替代文字

  • 下一步,我们可以配置实例。这里无需赘述细节。所有设置保持默认,然后点击……next
    替代文字

  • 保持添加存储不变,然后点击next
    替代文字

  • 添加标签,这是非常重要的一步。借助此标签,CodeBuild 将识别部署实例。我们稍后会用到它。为了简单起见,我只使用了名称标签,如下图所示,然后单击next
    替代文字

  • 目前,为了简单起见,请保持原样,然后点击next
    替代文字

  • 查看实例详情。
    替代文字

  • 接下来,为您的实例创建或使用现有的密钥对launch instance
    替代文字

服务器创建完成。开心😄!

步骤 3:为 AWS CodeDeploy 创建 IAM 角色,允许 CodeDeploy 调用其他 AWS 服务

  • 转到 IAM 控制台。

  • 点击左侧的“角色”。

  • 点击“创建角色”。

  • 选择 CodeDeploy 作为 AWS 服务。

  • 向下滚动并选择 CodeDeploy 作为您的用例。

  • 点击Next Permissions
    替代文字

  • 点击Next: Tags

  • 点击Next: Review

  • Role name

  • 点击Create role

第四步:在 AWS 中创建一个存储库来存储应用程序(或者,您也可以在 GitHub 上创建一个存储库)。

  • 从 AWS 控制台转到该CodeCommit服务。

  • 点击Create repository
    替代文字

  • 请提供存储库名称。

  • 可选:启用 Amazon CodeGuru 以验证代码质量。

  • 复制仓库 URL 并将仓库克隆到本地系统。克隆时请使用上面生成的凭据。

第五步:将应用程序源文件添加到此存储库

将应用程序源代码添加到此仓库并推送。您可以在此处查看应用程序:

请注意:由于无法通过代码提交分享,我在此分享的是 GitHub 链接。您可以克隆此 GitHub 仓库,并将相同的代码推送到 AWS CodeCommit。
源代码包含两个重要文件buildspec.yamlappspec.yaml`.yml`buildspec.yaml文件包含创建生产版本的步骤,该版本将存储在代码工件中;`.yml` 文件appspec.yaml包含设置环境并在 EC2 实例上启动生产服务器的步骤。 如果您对 YAML 文件感到困惑,请
放心,我们将在后面的章节中讨论。

步骤 6:配置 CodeBuild

  • 点击Getting started代码构建下方的按钮。

  • 点击创建项目。

  • 请给项目命名。

  • Source providerAWS 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.

Enter fullscreen mode Exit fullscreen mode

以下是一个示例 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
Enter fullscreen mode Exit fullscreen mode
  • 这次部署我将使用 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

  • 选择代码部署代理的更新周期。指定周期过后,代码部署代理将自动更新。
    替代文字

  • CodeDeployDefault.AllAtOnce在部署设置中选择。
    替代文字

  • 此管道跳过负载均衡器。

  • 最后,点击Create Deployment Group

第 8 步:是时候建立一条管道了。

  • 点击Getting StartedCodePipeline 下方。

  • 点击Create pipeline

  • 请提供管道名称。

  • 最好创建一个新的服务角色。选择一个新的服务角色。AWS 将创建一个具有所需权限的角色。

  • 点击next
    替代文字

  • 下一步,将源提供程序添加为 AWS CodeCommit。

  • 请从下拉菜单中选择您的存储库名称。

  • 请从下拉菜单中选择分行名称。

  • 建议使用 Amazon CloudWatch Events 作为变更检测选项。

  • 选择 CodePipeline 默认格式作为输出工件格式。

  • 点击Next
    替代文字

  • 选择 AWS CodeBuild 作为构建提供程序。

  • 请在此处核对您所在的地区。

  • 选择您之前创建的项目。

  • 选择构建类型为“单次构建”。

  • 如有需要,请添加环境变量。
    替代文字

  • 现在进入添加部署阶段。

  • 选择部署提供程序为 AWS CodeDeploy。

  • 请同时确认您的地区。

  • 请从下拉菜单中选择您的应用程序。

  • 选择之前创建的部署组。

  • 点击Next
    替代文字

  • 最后,检查您的流程并点击Create pipeline

前往流水线,您可以看到流水线正在运行。请等待作业完成,这需要一些时间。如果作业成功完成,恭喜🎉,您已完成。


步骤 9:(可选):故障排除

如果您已成功完成以上步骤,那您真是幸运。如果任务失败,请不要担心。请尝试以下步骤进行故障排除。

故障排除 1

  • 请手动将代码部署代理配置到您的 EC2 实例。请查看以下步骤了解具体操作方法。

  • 请逐条运行以下命令。     

    注意:我使用的是 Linux 系统。如果您使用的是其他操作系统,请按照以下步骤操作:安装代码并部署代理

    • 通过 SSH 连接到您的服务器。
    • sudo yum update
    • sudo yum install ruby
    • sudo yum install wget
    • cd /home/ec2-user
    • 使用以下命令下载代码部署代理。

    • 使用以下命令运行安装脚本

      • 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