You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ASG实例的AMI启动时加载GitHub分支最新代码?

解决ASG实例启动时自动拉取GitHub最新代码并跳过主机确认的方案

一、提前处理Git主机确认问题

要避免实例启动时Git拉取代码出现已知主机确认提示,有两种可靠方案:

方案1:预加载GitHub SSH指纹(推荐,更安全)

制作基础AMI时,手动执行以下命令,将GitHub的SSH主机指纹写入实例的known_hosts文件:

ssh-keyscan github.com >> /home/ec2-user/.ssh/known_hosts  # 对应EC2默认用户,根据实际用户调整
chmod 600 /home/ec2-user/.ssh/known_hosts
chown ec2-user:ec2-user /home/ec2-user/.ssh/known_hosts

后续Git通过SSH拉取代码时,就不会弹出主机确认的交互提示。

方案2:配置Git跳过主机检查(简单但安全性稍低)

如果对安全要求不高,可在AMI中配置Git全局参数,强制跳过主机密钥检查:

git config --global core.sshCommand "ssh -o StrictHostKeyChecking=no"

二、配置私有仓库拉取凭证(若仓库非公开)

如果你的GitHub仓库是私有库,需要提前在AMI中配置拉取凭证:

  • SSH密钥方式:将具有仓库拉取权限的SSH私钥(id_rsa)放到实例的/home/ec2-user/.ssh/目录,设置权限为600,同时将对应公钥添加到GitHub账号的SSH密钥列表中。
  • PAT方式:使用GitHub个人访问令牌(PAT),拉取地址改为https://<你的PAT>@github.com/用户名/仓库名.git,无需配置SSH密钥。

三、添加实例启动脚本(User Data)

在Auto Scaling Group的启动配置/模板中,添加User Data脚本,让实例启动时自动拉取最新代码:

#!/bin/bash
set -e  # 遇到错误立即退出

# 定义代码目录和仓库信息
APP_DIR="/opt/your-app"
REPO_URL="git@github.com:your-username/your-repo.git"
TARGET_BRANCH="main"

# 创建代码目录并切换
mkdir -p $APP_DIR
cd $APP_DIR

# 首次启动克隆仓库,后续启动拉取最新代码
if [ ! -d .git ]; then
    git clone -b $TARGET_BRANCH $REPO_URL .
else
    git pull origin $TARGET_BRANCH
fi

# 可选:执行后续部署操作(比如安装依赖、启动服务)
# cd $APP_DIR
# npm install --production
# systemctl enable --now your-app-service

四、可选优化:结合CodeBuild更新AMI

如果你希望进一步减少实例启动时的拉取时间,可在现有的CodeBuild流水线中添加步骤,每次代码推送后自动更新基础AMI:

  1. 在CodeBuild中完成代码构建、依赖安装后,使用Packer或EC2 Image Builder创建包含最新代码的AMI。
  2. 更新Auto Scaling Group的启动模板,指向新生成的AMI。
  3. 保留启动脚本中的git pull作为兜底,确保实例启动时能获取到最新的代码变更。

内容的提问来源于stack exchange,提问作者Juan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:35:30