banner
约 1,200 字
4 分钟

GitHub Actions 入门教程:push 即部署的免费流水线

摘要

GitHub Actions 是内置的免费 CI/CD 流水线,push 即自动测试部署。本教程依据官方文档,介绍 workflow/event/job/step 概念、第一个 ci.yml、常用官方 Action、用 Secrets 安全部署到服务器的 rsync 示例、schedule 定时触发,以及缓存与省额度技巧。

GitHub Actions 入门教程:免费的全自动流水线

每次 push 代码,自动跑测试、自动构建、自动部署到服务器——这就是 CI/CD。GitHub Actions 是 GitHub 内置的自动化流水线,公开仓库免费用。本教程依据 GitHub 官方文档(docs.github.com/actions)整理。

一、基本概念

  • Workflow(工作流):放在仓库 .github/workflows/ 下的 YAML 文件,一个文件一条流水线

  • Event(触发事件):什么时候跑,如 push、PR、定时

  • Job(任务):一组步骤,默认并行执行,跑在一台全新虚拟机上

  • Step(步骤):一条 shell 命令或一个现成的 Action

二、第一个 Workflow

在仓库根目录建 .github/workflows/ci.yml

YAML
name: CI

on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 22

      - run: npm ci
      - run: npm test

push 之后到仓库的 Actions 标签页就能看到运行记录:绿色勾=成功,红色叉=失败,点进去有每一步的完整日志。

三、常用动作拆解

  • uses: 引用别人写好的 Action(市场里有上万种),actions/checkout@v4 是检出代码,几乎所有流水线的第一步

  • run: 执行 shell 命令,多条命令可写成多行

  • with: 给 Action 传参数

  • runs-on: ubuntu-latest 是运行环境(也有 windows-latest、macos-latest)

四、自动部署到服务器

测试通过后自动 rsync 部署(结合本站 SSH 密钥与 rsync 教程):

YAML
jobs:
  deploy:
    runs-on: ubuntu-latest
    needs: test          # 等测试通过才执行
    steps:
      - uses: actions/checkout@v4

      - name: Deploy via rsync
        env:
          SSH_KEY: ${{ secrets.SSH_KEY }}
        run: |
          mkdir -p ~/.ssh
          echo "$SSH_KEY" > ~/.ssh/id_ed25519
          chmod 600 ~/.ssh/id_ed25519
          rsync -avz --delete -e "ssh -p 2222" ./ user@服务器IP:/var/www/site/

私钥绝不写进代码:仓库 Settings → Secrets and variables → Actions,新建 SSH_KEY,用 ${{ secrets.SSH_KEY }} 引用,日志里会自动打码。

五、定时任务与其他触发

YAML
on:
  schedule:
    - cron: "0 18 * * *"    # 每天 UTC 18:00(北京时间凌晨 2 点)
  workflow_dispatch:         # 允许在网页上手动触发

Actions 可以当"云上的 crontab"用,比如每天自动抓取数据、签到、生成统计。

六、省钱与提速技巧

技巧

做法

缓存依赖

actions/cache@v4 缓存 node_modules,快几十秒

只在需要时跑

paths 过滤:改了哪类文件才触发

并行拆分

lint / test 拆成多个 job 并行

加超时

timeout-minutes: 10 防止卡死烧额度

公开仓库完全免费;私有仓库每月有免费额度(2000 分钟),个人项目基本用不完。

七、总结

需求

做法

建流水线

.github/workflows/*.yml

触发

on: push / pull_request / schedule

用现成能力

uses: 官方 Action

部署

rsync/scp + Secrets 存密钥

手动触发

workflow_dispatch

从"本地打包再 scp 上去"进化到"push 即部署",是个人项目工程化收益最大的一步,而 GitHub Actions 让这一切免费。

END