GitHub Actions + ECS:从零搭建 CI/CD 流水线
本文记录了如何使用 GitHub Actions 实现最基础的自动化 CI/CD,将私有仓库自动部署到 ECS 服务器。
CI
ci 比较简单,就是在 push 后附加一次自动检查
直接让 ai 写 ci 文件到 项目/.github/workflows/ci.yml 即可
push 后 github 会自动在自己的服务器上执行 ci.yml 文件的步骤
进行 lint / 类型检查 / build 等
成功与否会显示在 github 仓库的 Actions 里
CD
cd 权限配置比较麻烦
第一步:GitHub Actions 连接 ECS
本地 Bash 执行命令
ssh-keygen -t ed25519 -C "注释" -f C:\Users\用户名\.ssh\秘钥名称
一路回车生成一对密钥
本地 Bash 执行命令
ssh-keyscan -H -t ed25519 服务器ip
获取服务器公开主机指纹
github 仓库 -> Settings -> Secrets and variables -> Actions 添加四个条目:
- ECS_HOST:服务器 IP 地址
- ECS_USER:服务器用户名(如 root)
- ECS_SSH_PRIVATE_KEY:刚才的私钥
- ECS_SSH_KNOWN_HOSTS:服务器指纹
登录到服务器上,在 root 用户的 ~/.ssh 目录下,输入指令保存公钥
echo "你复制的公钥内容" >> ~/.ssh/authorized_keys
然后配置一下权限,输入指令
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
第二步:ECS 连接私有 GitHub 仓库
ECS Bash执行命令
ssh-keygen -t ed25519 -C "注释" -f /root/.ssh/秘钥名称
依旧一路回车生成一对秘钥
github 仓库 -> Settings -> Deploy keys 添加条目: Title: xxx read-only Key:刚才的公钥 Allow write access:不勾选
ECS Bash 执行命令,让仓库使用新密钥
cat >> /root/.ssh/config <<'EOF'
Host SSH别名
HostName github.com
User git
IdentityFile /root/.ssh/私钥
IdentitiesOnly yes
EOF
chmod 600 /root/.ssh/config
测试身份
ssh -T git@SSH别名
看到类似“successfully authenticated, but GitHub does not provide shell access”就是成功
ECS Bash 执行命令
cd 项目仓库
git remote set-url origin git@SSH别名:github用户名/项目名.git
git remote -v
把项目远程地址改为 SSH
第三步:编写 CD 文件
最后在本地让 ai 写 cd 文件到 项目/.github/workflows/deploy.yml
记得告诉他刚才 Actions 里的四个条目的名称(ECS_HOST ...)否则读不到
以后 ci 成功后即可自动 cd