跑单元测试、打包代码、部署到服务器、发布版本号,能在代码提交的一瞬间自动完成。
什么是 GitHub Actions?
简单来说,GitHub Actions 是一个事件驱动的自动化平台。
事件 (Event):当你推送代码(push)、发起合并请求(pull request)或者给仓库打星(star)时。
动作 (Action):它会自动触发预先定义好的任务。
它直接集成在 GitHub 中,无需像 Jenkins 那样额外部署服务器,而且对于开源项目是完全免费的。
场景一:Python 项目——从测试到 Release 自动发布
对于 Python 开发者,最优雅的工作流是:推送到主分支跑测试 -> 打版本标签(Tag)自动生成 Release 并上传 Wheel 包。
name: Python Release Pipeline
on:
push:
branches: [ main ]
tags: [ 'v*' ] # 匹配 v1.0.0, v2.1.0 等
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- run: pip install pytest && pytest
publish:
needs: test
if: startsWith(github.ref, 'refs/tags/') # 只有推标签时才执行
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Wheel
run: |
pip install build
python -m build
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: dist/* # 自动将打包后的 whl 和 tar.gz 上传到 Release 附件
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
场景二:前端项目——自动构建并部署到 GitHub Pages
如果你有一个 React、Vue 或静态博客(Hexo/Hugo),你一定希望代码一提交,网站就自动更新。
- 核心逻辑:安装依赖 -> 构建静态文件 -> 推送到
gh-pages分支。
name: Deploy Website
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm install
- run: npm run build # 产出通常在 dist 文件夹
- name: Deploy to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: dist # 部署构建后的文件夹
branch: gh-pages # 部署到的目标分支
场景三:DevOps 进阶——自动构建 Docker 镜像并推送到仓库
对于微服务开发者,自动更新 Docker 镜像并推送到 Docker Hub 或阿里云镜像服务是刚需。
- 亮点:利用
secrets保护账号密码,利用tags自动给镜像打版本。
name: Docker Build and Push
on:
push:
tags: [ 'v*' ]
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
push: true
tags: user/my-app:latest, user/my-app:${{ github.ref_name }} # 同时打 latest 和版本号标签
场景四:定时任务(Cron Jobs)——你的云端小秘书
GitHub Actions 不仅能跟随代码变动触发,还能定时运行。比如:每天早上 8 点抓取天气、自动签到、或者定时清理数据库。
name: Daily Cron Job
on:
schedule:
- cron: '0 0 * * *' # 每天北京时间上午 8 点运行 (UTC 0:00)
workflow_dispatch: # 允许手动在页面点击运行
jobs:
morning-task:
runs-on: ubuntu-latest
steps:
- name: Run my script
run: curl https://my-api.com/daily-checkin?token=${{ secrets.MY_TOKEN }}
总结
GitHub Actions 的强大之处在于它消除了“环境一致性”的问题。无论是 Python 的打包、前端的部署,还是 Docker 的分发,你只需要在 .github/workflows 下写好那几十行 YAML 脚本,剩下的就交给 GitHub 的服务器去处理。