使用 GitHub Actions 和 AWS CodeDeploy 在 Amazon EC2 上部署 GitHub 项目的完整指南
在 Amazon EC2 上根据 Git 提交自动部署。配置 CodeDeploy 和 GitHub CI/CD 操作的完整指南。
在 Amazon EC2 上根据 Git 提交自动部署。配置 CodeDeploy 和 GitHub CI/CD 操作的完整指南。
先决条件
目录
- 为 EC2 和 CodeDeploy 创建 IAM 角色
- 创建 EC2 实例
- 启动 EC2 实例
- 在 EC2 实例上安装 CodeDeploy 代理
- CodeDeploy 服务配置
- GitHub 项目
- GitHub Action
笔记
选择 CodeDeploy Agent 和 GitHub 将使用的特定 AWS 服务区域。
为 EC2 和 CodeDeploy 创建 IAM 角色
为EC2 实例创建角色-
- 选择AWS 服务作为受信任实体,选择EC2作为用例,然后单击“下一步:权限”。
- 在“权限”页面上,选择“AmazonEC2RoleforAWSCodeDeploy策略”,然后单击“下一步:标签”。
- 忽略标签,点击“下一步:审核”。
- 在审核页面上,将角色名称设置为EC2_Role 。

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

-
创建 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 地址,并使用默认用户名进行连接。
在 EC2 实例上安装 CodeDeploy 代理
要使用 CodeDeploy 服务部署 git 仓库,必须在 EC2 实例中安装codeDeploy-agent 。
使用以下命令安装codedeploy-agent。
sudo yum update
sudo yum install -y ruby
sudo yum install wget
wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install
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
sudo ./install auto
sudo service codedeploy-agent start
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'
ec2_public_ip从EC2 实例获取
GitHub 项目
这是一个使用 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
GitHub Action
首先,创建一个具有完整策略的IAM 用户,并为该用户AWSCodeDeployFullAccess生成访问密钥和秘密访问权限,以便配置 GitHub Action。
配置 Action 之前,请先在 GitHub 仓库中设置环境。
GitHub 仓库的更改将触发GitHub Action,该 Action 包含两个 CI/CD 作业 -
持续集成作业将编译代码并运行 JUnit 测试用例。
持续部署作业将调用 AWS CodeDeploy 服务。应用程序 - Git_Application
部署组 - development_group
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 }}
现在请对您的代码仓库进行更改。您的更改应该会自动部署到您的 EC2 服务器。
通过网页浏览器或 Postman 访问该应用程序。
curl --location --request GET 'http://{{[ec2_public_ip]}}:8080/student'
ec2_public_ip从EC2 实例获取














