文章列表
2 分钟阅读

GitHub Actions 自动部署实战:从检查到发布的完整流程

更新说明:新增 GitHub Actions 自动部署实践。


系列:版本控制基础

第 8 / 8 篇

  1. Git 安装与使用教程:Linux 和 Windows 从零开始版本管理
  2. Git 进阶:你迟早要会的几个救急命令
  3. Git 分支管理指南:main、dev、feature、release 怎么用
  4. Git Commit 规范:怎么写清楚提交信息
  5. GitHub Pull Request 工作流入门
  6. GitHub Actions 入门:为博客加自动检查
  7. Git 冲突解决指南:merge、rebase、cherry-pick 冲突怎么处理
  8. GitHub Actions 自动部署实战:从检查到发布的完整流程

GitHub Actions 不只适合跑检查,也适合做自动部署。关键是把流程拆清楚:先检查,再构建,最后部署。任何一步失败,都不要继续往下走。

基础可以先看 GitHub Actions 入门:为博客加自动检查

一个基本流程

.github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npm run verify
- run: npm run deploy
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}

这里最重要的是 npm run verify 在部署前执行。检查不过就不要发布。

密钥放在哪里

部署 token 不要写进仓库。放到 GitHub 仓库的 Secrets 里,然后通过环境变量传给部署命令。

命名尽量清楚:

CLOUDFLARE_API_TOKEN
DEPLOY_SSH_KEY
SERVER_HOST
SERVER_USER

权限也要收窄。能只部署一个项目,就不要给账号全部权限。

SSH 部署的写法

如果是部署到服务器,可以用 SSH:

- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
- name: Deploy
run: |
ssh -o StrictHostKeyChecking=accept-new deploy@server 'cd /srv/app && ./deploy.sh'

服务器上的 deploy.sh 要尽量可重复执行,不要依赖手工步骤。

失败时怎么办

自动部署不是只管成功路径。至少要考虑:

  • 构建失败不部署
  • 部署失败能看到日志
  • 上一个版本能恢复
  • 数据库迁移失败不会继续启动新代码

对于 Docker 项目,可以保留上一个镜像 tag。对于静态站点,通常重新部署上一版即可。

不要把所有事都塞进 workflow

workflow 负责调度,复杂逻辑放脚本里。这样本地也能执行同样流程。

deploy.sh
set -e
git pull
docker compose build
docker compose up -d
docker compose ps

总结

自动部署的目标不是炫技,而是减少漏步骤。流程越接近日常手动发布,越容易维护。先把检查、构建、部署拆清楚,再逐步加通知、回滚和环境保护。