作为研究生,你是否经常需要手动部署项目、运行测试、或者处理重复性的构建任务?GitHub Actions 可以帮你自动化这一切,而且完全免费!今天就手把手教你打造第一个自动化工作流。
什么是 GitHub Actions?
GitHub Actions 是 GitHub 提供的 CI/CD(持续集成/持续部署)工具。它可以监听代码仓库中的事件(如 push、pull request),自动执行预设的任务。
💡 免费额度: GitHub 为所有账户提供每月 2000 分钟的免费运行时长,个人仓库完全够用!
核心概念
在开始之前,我们需要了解几个核心概念:
1. Workflow(工作流)
一个完整的自动化流程,放在 .github/workflows 目录下。一个仓库可以包含多个工作流。
2. Event(事件)
触发工作流的事件,比如代码推送、Issue 创建、定时任务等。
3. Job(任务)
工作流中的执行单元,一个工作流可以包含多个 Job,它们默认并行执行。
4. Step(步骤)
每个 Job 包含多个 Step,可以是 Shell 命令或 Action。
5. Action(动作)
可重用的单元,GitHub 官方和社区提供了大量现成的 Action。
实战:自动测试 Python 项目
假设你有一个 Python 项目,每次 push 代码时都想自动运行测试。只需要在项目中创建以下文件:
mkdir -p .github/workflows
touch .github/workflows/test.yml
然后在 test.yml 中写入:
name: Python Test
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install pytest
- name: Run tests
run: pytest
推送到 GitHub 后,每次代码变更都会自动触发测试!
实战:自动部署静态网站
如果你有静态博客或文档网站,可以用 GitHub Actions 自动部署到 GitHub Pages:
name: Deploy to GitHub Pages
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
extended: true
- name: Build
run: hugo --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
实用技巧
1. 使用缓存加速构建
Python、Node.js 等项目的依赖安装通常很慢,可以使用缓存加速:
- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
2. 定时任务
可以用 cron 语法设置定时执行:
on:
schedule:
- cron: '0 0 * * *' # 每天午夜执行
3. 手动触发
添加 workflow_dispatch 可以手动触发工作流:
on:
workflow_dispatch:
inputs:
environment:
description: '部署环境'
required: true
default: 'staging'
总结
GitHub Actions 是一个强大的自动化工具,可以帮你:
- 自动运行测试,确保代码质量
- 自动部署项目,省去手动操作
- 定时执行任务,如数据备份、报表生成
- 自动检查代码格式和风格
"自动化是为了让机器做重复的事,让人做创造性的事。"
快去试试看吧,你会发现原来需要手动做的事情,现在都可以交给 GitHub Actions 自动完成!