为什么你的 GitHub 项目需要 Actions?详解 Workflow、Secrets 与自动部署
如果你在 GitHub 上维护过项目,一定遇到过这些场景:
-
每次 push 代码都要手动跑测试
-
发版前要手动打包、压缩、上传 Release
-
想自动部署到服务器 / Pages / Docker Hub
-
想定时跑脚本、爬数据、同步仓库
GitHub Actions 正是为这些自动化而生的。
一、什么是 GitHub Actions?
GitHub Actions 是 GitHub 官方提供的 自动化工作流(Workflow)系统,可以在特定事件发生时自动执行一系列任务。
你可以把它理解成:“GitHub 内置的 CI/CD + 自动化脚本平台”
能干什么?
-
CI:自动测试、构建、Lint
-
CD:自动部署到服务器 / Docker / 云平台
-
自动发布 Release
-
定时任务(cron)
-
自动同步代码、生成文档
-
自动化运维 & 脚本执行
二、GitHub Actions 的核心概念
GitHub Actions 其实就 5 个关键词:
| 名称 | 作用 |
|---|---|
| Workflow | 整个自动化流程 |
| Event | 触发条件 |
| Job | 一组任务 |
| Step | 具体一步 |
| Action | 可复用的动作 |
Workflow(工作流)
-
一个 Workflow = 一个 yml 文件
-
存放在仓库的:
.github/workflows/例如:
.github/workflows/ci.ymlEvent(触发事件)
Workflow 什么时候运行?
常见事件:
on: push: pull_request: workflow_dispatch:| 事件 | 说明 |
|---|---|
| push | 推送代码 |
| pull_request | PR 提交 |
| workflow_dispatch | 手动触发 |
| schedule | 定时执行 |
Job(任务)
-
一个 Workflow 可以有多个 Job
-
Job 默认并行执行
-
Job 运行在一个虚拟环境中
jobs: build: runs-on: ubuntu-latestStep(步骤)
-
Job 里的每一步
-
可以是:
-
执行命令
-
调用 Action
-
steps: - run: echo "Hello Actions"Action(动作)
Action 是别人写好的“插件”,直接拿来用:
- uses: actions/checkout@v4官方 Action 市场:
https://github.com/marketplace?type=actions
三、一个最简单的 GitHub Actions 示例
示例:每次 push 自动输出一句话
name: Hello Actions
on: push:
jobs: hello: runs-on: ubuntu-latest steps: - name: Say hello run: echo "Hello GitHub Actions!"保存为:
.github/workflows/hello.yml推送代码后,你就能在 Actions 标签页看到运行日志。
四、常见用法 1:自动 CI(测试 / 构建)
Node.js 项目自动测试
name: Node CI
on: push: pull_request:
jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- uses: actions/setup-node@v4 with: node-version: 20
- run: npm install - run: npm test常用 setup Action:
| 语言 | Action |
|---|---|
| Node | actions/setup-node |
| Python | actions/setup-python |
| Java | actions/setup-java |
| Go | actions/setup-go |
五、常见用法 2:自动发布 Release
示例:打 tag 后自动发布 Release
on: push: tags: - "v*"
jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- uses: softprops/action-gh-release@v2 with: generate_release_notes: true用途:
-
自动生成 Release
-
自动附带编译产物
-
非常适合开源项目
六、常见用法 3:定时任务(Cron)
每天凌晨跑一次脚本
on: schedule: - cron: "0 0 * * *"Cron 使用的是 UTC 时间,不是本地时间!
七、Secrets:安全存储敏感信息
千万不要把 Token / 密码写进 yml!
正确做法
-
仓库 → Settings → Secrets → Actions
-
添加:
SSH_KEYAPI_TOKEN- 在 Workflow 中使用:
env: TOKEN: ${{ secrets.API_TOKEN }}八、常见用法 4:自动部署(示例)
推送代码后自动部署到服务器(SSH)
- name: Deploy uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} script: | cd /var/www/app git pull docker compose up -d九、GitHub Actions 的优缺点
优点
-
GitHub 原生,零额外部署
-
对开源项目 免费额度很大
-
Action 生态极其丰富
-
YAML 即配置,学习成本低
缺点
-
私有仓库分钟数有限
-
Runner 环境不可长期保存状态
-
YAML 调试体验一般
-
复杂流程可读性会下降
十、适合用 GitHub Actions 的场景
✔ 开源项目
✔ 个人博客 / 文档
✔ CI/CD 自动化
✔ 定时脚本
✔ 云函数 / Worker 构建
✔ Docker 自动构建推送
十一、学习 & 资源推荐
-
官方文档(必看):https://docs.github.com/actions
-
Action 市场: https://github.com/marketplace/actions
-
Awesome Actions:https://github.com/sdras/awesome-actions
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!