GitHub Actions是什么
你写完代码手动测试、打包、上传到服务器,每次发布半小时还容易出错。GitHub Actions把这些步骤自动化——代码推送到GitHub后自动运行测试,测试通过后自动构建,构建成功后自动部署到服务器。整个流程零人工干预,而且完全免费(公有仓库不限量,私有仓库每月2000分钟)。
第一步:创建工作流文件
在仓库根目录创建.github/workflows/目录,新建YAML文件如ci.yml。基础结构:
name: CI
on: [push]
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
– name: Run tests
run: pytest
这个工作流在每次push时触发,检出代码、安装Python依赖、运行测试。
第二步:触发器配置
on字段控制工作流何时触发。常用触发器:
- on: [push] ——每次推送触发
- on: [pull_request] ——每次PR触发
- on: push: branches: [main] ——只有推送到main分支触发
- on: schedule: – cron: ‘0 2 * * *’ ——每天凌晨2点定时触发
- on: workflow_dispatch ——手动点击按钮触发
推荐配置:PR时运行测试,合并到main后运行测试+部署。
第三步:自动测试与质量检查
在测试步骤中加入代码质量检查:
jobs:
test:
steps:
– uses: actions/checkout@v4
– uses: actions/setup-python@v5
with: {python-version: ‘3.11’}
– run: pip install -r requirements.txt
– run: pytest –cov=src –cov-report=xml
– run: flake8 src/
– run: black –check src/
– name: Upload coverage
uses: codecov/codecov-action@v3
with: {file: ./coverage.xml}
这个配置运行单元测试、代码覆盖率检查、代码风格检查(flake8)、格式化检查(black),并把覆盖率报告上传到Codecov。
第四步:构建与打包
测试通过后自动构建:
jobs:
build:
needs: test
steps:
– uses: actions/checkout@v4
– run: pip install build
– run: python -m build
– name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
needs: test表示build任务等test任务成功后才执行。构建产物通过upload-artifact保存,供后续部署步骤下载。
第五步:多环境部署
测试和构建通过后自动部署到服务器:
jobs:
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == ‘refs/heads/main’
steps:
– name: Download artifact
uses: actions/download-artifact@v4
with: {name: dist}
– name: Deploy to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
source: dist/*
target: /var/www/app/
if条件确保只有main分支才部署。敏感信息(服务器地址、密钥)通过Secrets管理,在仓库Settings → Secrets and variables → Actions中配置。
常见问题与误区
- 工作流不触发——检查YAML缩进是否正确,GitHub对缩进敏感
- Secrets读取失败——Secrets名称区分大小写,确保拼写一致
- 步骤执行顺序混乱——用needs明确依赖关系,默认是并行执行
- 免费额度超限——私有仓库每月2000分钟,大型项目注意优化
效率数据
实测:一个小型Python项目,手动测试+部署约15分钟,GitHub Actions自动化后约3分钟(大部分是等待时间)。一个前端项目,手动构建+上传到CDN约20分钟,Actions自动化约5分钟。更重要的是自动化消除了人为失误——手动部署的出错率约5%,自动化后接近0%。核心建议是:任何有测试和部署流程的项目,都应该在创建仓库时就配置好CI/CD。