GitHub Actions 实战:从 0 到 1 搭建个人自动化流水线

写作注释: 本文由 AI 生成, 主题「从零开始用 GitHub Actions 做自动化」, 内容仅供参考, 欢迎留言交流。

开头引入

我手头有不少琐碎任务,比如定时抓取数据、自动编译博客、每隔几小时拉取一次接口。过去全靠服务器上的 crontab,配置繁琐且不易查看日志。直到我认真用了 GitHub Actions,才发现原来自动化可以这么简单:它免费、零运维、只需要一个 YAML 文件,而且每条运行记录都清晰可查。

这篇文章会从零开始,不讲复杂理论,直接带你写出第一个能跑的工作流。全程只需要一个 GitHub 账号和一次 commit,之后,你的自动化就交给 GitHub 托管,真正实现“一劳永逸”。

GitHub Actions 是什么?为什么值得学?

GitHub Actions 是 GitHub 提供的持续集成与持续部署(CI/CD)服务。它的核心运作方式是:当仓库发生某个事件时(push、PR、定时、手动触发),GitHub 会自动创建一个虚拟机环境,按你写好的步骤执行命令。

选择它的理由很直接:

  • 免费额度充足:Public 仓库完全免费,私有仓库每月也有 2000 分钟免费额度;
  • 无需运维机器:虚拟机由 GitHub 托管,支持 Ubuntu、Windows、macOS;
  • 生态强大:Marketplace 里有大量现成 Action 可以复用,不必什么都自己写。

简单理解:GitHub Actions 就是一个“云端定时运行的脚本箱”,你在 .github/workflows/ 目录下放一个 YAML 文件,剩下的都交给 GitHub。

核心概念:Workflow / Job / Step / Event

动手写之前,先理清四个关键概念。

  • Workflow(工作流):一次自动化的完整流程定义,对应一个 YAML 文件。
  • Job(任务):工作流中的一个执行单元,可以包含多个 Step。
  • Step(步骤):Job 内具体的命令或 Action,按顺序从上到下执行。
  • Event(事件):触发工作流的条件,比如 pushpull_requestschedule(定时)、workflow_dispatch(手动)。

下面是最小可运行的工作流:

1
2
3
4
5
6
7
8
9
10
name: My First Workflow

on: [push]

jobs:
hello:
runs-on: ubuntu-latest
steps:
- name: echo hello
run: echo "Hello from GitHub Actions"

把这个文件保存为 .github/workflows/first.yml 并 push 到仓库,片刻后就能在仓库的 Actions 标签页看到运行记录,每次提交都会自动跑一遍。

实战:写一个定时抓数据的自动化

接下来写一个真正有用的场景:每天 UTC 时间 23:00(即北京时间早上 7 点)自动用 Python 抓取接口数据,并把结果提交回仓库。工作流如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: Daily Crawler

on:
schedule:
- cron: "0 23 * * *" # UTC 时间,注意换算时区
workflow_dispatch: # 支持手动触发,方便测试

jobs:
fetch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Run script
run: python scripts/fetch.py
- name: Commit changes
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add .
git commit -m "chore: update data $(date)" || echo "No changes"
git push

对应的 Python 脚本 scripts/fetch.py

1
2
3
4
5
6
import requests
import json
import pathlib

data = requests.get("https://api.example.com/today").json()
pathlib.Path("data.json").write_text(json.dumps(data))

工作流里其实做了三件事:拉取最新代码、运行抓取脚本、把生成的文件提交回仓库。这几个步骤组合起来,你的仓库就变成了一个自动更新的数据存档,全程无需人工介入。注意,schedule 使用的 cron 表达式默认是 UTC 时间,中国用户记得自行换算,比如 "0 15 * * *" 对应北京时间 23:00。

进阶技巧:Secrets、缓存与排错

1. 敏感信息一律放入 Secrets。不要把 API Key 直接写在 YAML 或脚本中。请前往仓库 Settings → Secrets and variables → Actions 添加密钥,然后在 YAML 中引用:

1
2
env:
API_KEY: ${{ secrets.API_KEY }}

2. 使用缓存加速依赖安装。如果每次执行都要 pip install,可以开启 setup-python 自带的 pip 缓存:

1
2
3
4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: "pip"

3. 排查失败任务。Actions 页面点击失败的任务,即可看到每个 Step 的完整日志。常用技巧有:在脚本开头加 set -x 打印详细执行过程;或者临时在 YAML 中加一步 run: env 查看环境变量,快速定位问题。

4. 区分定时任务与手动触发schedule 只会在指定时间自动运行,而 workflow_dispatch 允许你在网页端手动点击“Run workflow”,两种事件可以同时配置,互不冲突。

总结

这篇文章从“为什么选 GitHub Actions”讲起,带你认识了 Workflow、Job、Step、Event 四个核心概念,并完成了一个定时抓取数据的自动化工作流,最后补充了 Secrets、缓存与排错技巧。

我的建议是:不要停留在示例,而是从自己的真实需求出发去改造它。比如每天自动更新博客的 RSS 参考、每周备份数据库并推送到私有仓库、每次 push 自动构建并部署到服务器。

这些场景的套路完全一致:定义触发事件 → 写好要执行的命令 → 推送到 .github/workflows/ 目录。一次 commit,之后世界开始自动运转。尝试一下,你也会上瘾。


GitHub Actions 实战:从 0 到 1 搭建个人自动化流水线
https://wumingmr.github.io/2026/08/11/GitHub-Actions-实战:从-0-到-1-搭建个人自动化流水线/
作者
无名
发布于
2026年8月11日
许可协议