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

如何使用 GitHub Actions 和 AWS CodeDeploy 在 Amazon EC2 上部署 GitHub 项目?如何在 Amazon EC2 上根据 Git 提交自动部署?本指南将详细介绍如何配置 CodeDeploy 和 GitHub CI/CD Action。

使用 GitHub Actions 和 AWS CodeDeploy 在 Amazon EC2 上部署 GitHub 项目的完整指南

在 Amazon EC2 上根据 Git 提交自动部署。配置 CodeDeploy 和 GitHub CI/CD 操作的完整指南。

在 Amazon EC2 上根据 Git 提交自动部署。配置 CodeDeploy 和 GitHub CI/CD 操作的完整指南。

图像


先决条件


目录


笔记


选择 CodeDeploy Agent 和 GitHub 将使用的特定 AWS 服务区域。

为 EC2 和 CodeDeploy 创建 IAM 角色


图像


为EC2 实例创建角色-

  1. 选择AWS 服务作为受信任实体,选择EC2作为用例,然后单击“下一步:权限”
  2. 在“权限”页面上,选择“AmazonEC2RoleforAWSCodeDeploy策略”,然后单击“下一步:标签”。
  3. 忽略标签,点击“下一步:审核”
  4. 在审核页面上,将角色名称设置为EC2_Role 。图像
  5. 打开 EC2_Role 并转到“信任关系”,然后点击“编辑信任关系”并粘贴以下策略 -
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "ec2.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
Enter fullscreen mode Exit fullscreen mode

图像


现在我们将为CodeDeploy创建一个角色。

  1. 选择AWS 服务作为受信任实体,选择EC2作为用例,然后单击“下一步:权限”
  2. 在“权限”页面上,选择以下策略,然后单击“下一步:标签”AmazonEC2FullAccess, AWSCodeDeployFullAccess, AdministratorAccess, AWSCodeDeployRole
  3. 可以忽略标签,点击“下一步:评论”
  4. 在审核页面上,将角色名称设置为CodeDeploy_Role 。图像
  5. 创建 CodeDeploy 角色后,打开 CodeDeploy_Role,转到“信任关系” ,然后“编辑信任关系”,并使用以下策略 -

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "codedeploy.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

创建 EC2 实例

要创建 EC2 实例,请转到 AWS 管理控制台上的 EC2 控制面板,然后单击“启动实例”

在 AIM 页面上,您可以根据需要选择任何卷类型。本文将选择免费套餐 Amazon Linux 2 AMI (HVM)、SSD 卷类型64 位 (x86)卷,然后单击“选择”

“选择实例类型”页面中选择t2.micro,然后进入“配置实例”页面。

要建立 EC2 实例和 codeDeploy 之间的连接,请选择我们之前创建的EC2_Role 。

“标签”页面上,添加一个名为“development”的标签。该标签需要创建一个codeDeploy服务。

配置安全组页面中添加名为“所有流量”的规则,选择名为“任意位置”的

此规则允许您从任何位置连接到实例。
注意- 不建议在生产环境中使用此规则。

选择审核页面,然后启动实例。等待几分钟即可启动 EC2 实例。

如果您想从本地系统访问实例(ssh),请创建一个新的密钥对并下载密钥。

图像
图像


启动 EC2 实例

实例启动并运行后,右键单击实例 ID,然后单击连接

在下一页,记下公网 IP 地址,并使用默认用户名进行连接

图像


照片-1576267423429-569309b31e84


在 EC2 实例上安装 CodeDeploy 代理

要使用 CodeDeploy 服务部署 git 仓库,必须在 EC2 实例中安装codeDeploy-agent 。

使用以下命令安装codedeploy-agent。

sudo yum update
Enter fullscreen mode Exit fullscreen mode
sudo yum install -y ruby
Enter fullscreen mode Exit fullscreen mode
sudo yum install wget
Enter fullscreen mode Exit fullscreen mode
wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install
Enter fullscreen mode Exit fullscreen mode

bucket-name 是包含您所在区域的 CodeDeploy 资源工具包文件的 Amazon S3 存储桶。region-identifier 是您所在区域的标识符。
存储桶名称和区域标识符列表

例如 -wget https://aws-codedeploy-ap-south-1.s3.ap-south-1.amazonaws.com/latest/install

chmod +x ./install
Enter fullscreen mode Exit fullscreen mode
sudo ./install auto
Enter fullscreen mode Exit fullscreen mode
sudo service codedeploy-agent start 
Enter fullscreen mode Exit fullscreen mode

CodeDeploy 服务配置


AWS CodeDeploy 服务将自动把 GitHub 应用程序部署到 EC2。

创建一个名为Git_Application的应用程序,计算平台 EC2/On-premises

GitHub Action将使用应用程序名称。
图像


应用程序创建完成后,创建一个名为development_gropup 的部署组。从之前创建并放入服务角色中的CodeDeploy_Role获取角色 ARN 。

GitHub Action将使用部署组名称。

选择“就地 部署”类型。选择Amazon EC2 实例环境配置和标签密钥开发,以创建 AWS EC2 实例。

选择计划管理器来安装 CodeDeploy 代理。设置“一次部署一次”的部署方式,并创建不带负载均衡器的部署组。

图像
图像
图像


部署组创建完成后,可以通过创建一个任意名称的部署来测试部署。

选择修订类型 我的应用程序存储在 GitHub 中,然后选择通过提供GitHub 令牌连接到 GitHub

连接到 GitHub 后,提供仓库名称和上次提交 ID。选择“覆盖内容”并创建部署。

图像
图像

请稍等几分钟⏳。

如果部署状态不成功,请从 EC2 实例验证部署日志/var/log/aws/codedeploy-agent/codedeploy-agent.log

请先重新部署并修复此问题。成功后,您就可以通过网页浏览器或 Postman 访问该应用程序了。

curl --location --request GET 'http://{{[ec2_public_ip]}}:8080/student'
Enter fullscreen mode Exit fullscreen mode

ec2_public_ipEC2 实例获取


GitHub 项目

fork spring -boot 示例仓库。

这是一个使用 MongoDB 的 Spring Boot 项目。
项目部署将使用docker-compose,其中已包含 MongoDB。

appspec.ymlcodeDeploy 用于管理部署的文件

它将setup.sh安装 docker 和 docker-compose。

run.sh用于docker-compose up

version: 0.0
os: linux
files:
  - source: .
    destination: /home/ec2-user/spring-boot-mongo/
hooks:
  AfterInstall:
   - location: setup.sh
     timeout: 300
     runas: root
  ApplicationStart:
   - location: run.sh
     timeout: 300
     runas: root
Enter fullscreen mode Exit fullscreen mode

GitHub Action

首先,创建一个具有完整策略的IAM 用户,并为该用户AWSCodeDeployFullAccess生成访问密钥和秘密访问权限,以便配置 GitHub Action。

配置 Action 之前,请先在 GitHub 仓库中设置环境。

图像

GitHub 仓库的更改将触发GitHub Action,该 Action 包含两个 CI/CD 作业 -

持续集成作业将编译代码并运行 JUnit 测试用例。
持续部署作业将调用 AWS CodeDeploy 服务。

应用程序 - Git_Application
部署组 - development_group

将以下 YAML 文件粘贴到操作配置中并提交。

name: CI/CD Pipeline
on:
  push:
    branches: [ main ]

jobs:
  continuous-integration:
    runs-on: ubuntu-latest
    steps:
      # Step 1
      - uses: actions/checkout@v2
      # Step 2
      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
      # Step 3
      - name: Build Application and Run unit Test
        run: mvn -B test --file student-service/pom.xml

  continuous-deployment:
    runs-on: ubuntu-latest
    needs: [continuous-integration]
    if: github.ref == 'refs/heads/main'
    steps:
     # Step 1
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}
     # Step 2
      - name: Create CodeDeploy Deployment
        id: deploy
        run: |
          aws deploy create-deployment \
            --application-name Git_Application \
            --deployment-group-name development_gropup \
            --deployment-config-name CodeDeployDefault.OneAtATime \
            --github-location repository=${{ github.repository }},commitId=${{ github.sha }}
Enter fullscreen mode Exit fullscreen mode


图像

现在请对您的代码仓库进行更改。您的更改应该会自动部署到您的 EC2 服务器。

通过网页浏览器或 Postman 访问该应用程序。

curl --location --request GET 'http://{{[ec2_public_ip]}}:8080/student'
Enter fullscreen mode Exit fullscreen mode

ec2_public_ipEC2 实例获取

文章来源:https://dev.to/ankushbehera/a-complete-guide-to-deploy-github-project-on-amazon-ec2-using-github-actions-and-aws-codedeploy-3f0b