如何通过CircleCI实现GitHub分支更新时自动更新AWS EC2上的源代码
实现方案
你已经完成的SSH密钥绑定配置可直接复用,不需要额外调用复杂的AWS Orbs,通过SSH远程执行命令即可实现代码自动同步,以下是完整操作步骤:
第一步:配置CircleCI项目环境变量
先在对应CircleCI项目的「Project Settings」->「Environment Variables」中添加3个非敏感配置变量,避免硬编码信息:
- EC2_PUBLIC_IP:你的EC2实例公网IP地址
- EC2_SSH_USER:EC2的SSH登录用户名,Amazon Linux默认是
ec2-user,Ubuntu默认是ubuntu - EC2_CODE_PATH:EC2上存放源代码的绝对路径,比如
/home/ec2-user/my-project
第二步:编写.circleci/config.yml配置文件
直接使用轻量基础镜像即可完成操作,配置示例如下:
version: 2.1 # 自带SSH客户端的轻量基础镜像 executors: base-executor: docker: - image: cimg/base:stable jobs: update_ec2_source_code: executor: base-executor steps: # 加载你之前添加到CircleCI的SSH密钥,替换为自己的SSH密钥指纹 - add_ssh_keys: fingerprints: - "替换为你的SSH密钥指纹,示例格式:ab:cd:ef:12:34:56:..." # 将EC2加入信任主机列表,避免SSH连接时弹出交互提示 - run: name: 添加EC2主机到信任列表 command: ssh-keyscan ${EC2_PUBLIC_IP} >> ~/.ssh/known_hosts # 远程连接EC2执行代码更新 - run: name: 同步最新代码到EC2 command: | ssh ${EC2_SSH_USER}@${EC2_PUBLIC_IP} " cd ${EC2_CODE_PATH} # 拉取对应分支的最新代码,替换为你要同步的分支名,比如main git pull origin main # 如有后续操作(安装依赖、重启服务等)可在下方添加,示例: # npm install && pm2 reload app.js " workflows: auto_sync_code: jobs: - update_ec2_source_code: # 配置触发条件,只有对应分支推送时才执行同步 filters: branches: only: main
请将上述配置中占位的SSH密钥指纹、同步分支名替换为你的实际业务配置
注意事项
- 提前在EC2上手动执行一次对应仓库的
git clone,确保EC2_CODE_PATH路径存在,且SSH登录用户对该路径有读写权限 - 确保EC2实例的安全组入站规则放开22端口,允许CircleCI的IP段访问,避免SSH连接被拒绝
- 如果你的GitHub仓库是私有仓库,需要提前在EC2实例上配置仓库的部署密钥,保证EC2有权限拉取最新代码
- 配置完成后可推送一个小改动到对应分支,查看CircleCI的Job运行日志即可快速排查权限、路径类错误
内容的提问来源于stack exchange,提问作者gsasikiran
相关产品推荐
相关产品推荐

