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(事件):触发工作流的条件,比如
push、pull_request、schedule(定时)、workflow_dispatch(手动)。
下面是最小可运行的工作流:
1 | |
把这个文件保存为 .github/workflows/first.yml 并 push 到仓库,片刻后就能在仓库的 Actions 标签页看到运行记录,每次提交都会自动跑一遍。
实战:写一个定时抓数据的自动化
接下来写一个真正有用的场景:每天 UTC 时间 23:00(即北京时间早上 7 点)自动用 Python 抓取接口数据,并把结果提交回仓库。工作流如下:
1 | |
对应的 Python 脚本 scripts/fetch.py:
1 | |
工作流里其实做了三件事:拉取最新代码、运行抓取脚本、把生成的文件提交回仓库。这几个步骤组合起来,你的仓库就变成了一个自动更新的数据存档,全程无需人工介入。注意,schedule 使用的 cron 表达式默认是 UTC 时间,中国用户记得自行换算,比如 "0 15 * * *" 对应北京时间 23:00。
进阶技巧:Secrets、缓存与排错
1. 敏感信息一律放入 Secrets。不要把 API Key 直接写在 YAML 或脚本中。请前往仓库 Settings → Secrets and variables → Actions 添加密钥,然后在 YAML 中引用:
1 | |
2. 使用缓存加速依赖安装。如果每次执行都要 pip install,可以开启 setup-python 自带的 pip 缓存:
1 | |
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,之后世界开始自动运转。尝试一下,你也会上瘾。