基于Github Actions构建CI-CD流程

一、基础环境准备

  1. 创建仓库:在GitHub上创建新仓库或使用已有仓库。
  2. 启用Actions:进入仓库「Settings」→「Actions」→「General」,启用Actions并选择允许的分支。
  3. 创建工作流文件:在仓库根目录的.github/workflows目录下新建YAML文件(如ci-cd.yml)。

二、定义工作流结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
name: CI/CD Pipeline  # 工作流名称
on: # 触发条件
push:
branches: [main] # 主分支推送时触发
pull_request:
branches: [main] # 主分支PR时触发
jobs: # 任务列表
build: # 构建任务
runs-on: ubuntu-latest # 运行环境
steps: # 执行步骤
- uses: actions/checkout@v3 # 检出代码
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: pip install -r requirements.txt
test: # 测试任务
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: pytest tests/ --cov=src
deploy: # 部署任务(示例为GitHub Pages)
needs: [build, test] # 依赖构建和测试任务
if: github.ref == 'refs/heads/main' # 仅主分支合并时部署
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist

三、核心功能实现

  1. 自动化测试

    • 集成测试框架(如Python的pytest、JavaScript的Jest),在test作业中运行测试用例。
    • 示例:pytest tests/ --cov=src --cov-report=xml(生成代码覆盖率报告)。
  2. 代码质量检查

    • 使用flake8/eslint等工具检查代码风格。
    • 示例:flake8 src/ tests/
  3. 自动化部署

    • 部署到GitHub Pages:使用actions-gh-pages Action。
    • 部署到云服务:通过SSH或API调用(需配置密钥)。
    • 示例:twine upload dist/*(发布Python包到PyPI)。

四、高级配置技巧

  1. 矩阵测试:跨多环境/版本并行测试

    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        python-version: [3.8, 3.9]
    steps:
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
    
  2. 密钥管理

    • 在仓库「Settings」→「Secrets」中存储敏感信息(如API密钥),通过${{ secrets.SECRET_NAME }}引用。
  3. 条件执行

    • 通过if条件控制步骤执行,例如仅在特定分支或事件触发时部署。
    • 示例:if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')(仅标签推送时部署)。
  4. 工件存储

    • 使用actions/upload-artifact保存构建产物,供后续作业使用。
    • 示例:actions/upload-artifact@v3保存dist/目录。

五、最佳实践

  • 分离职责:将构建、测试、部署拆分为独立作业,通过needs定义依赖关系。
  • 缓存优化:缓存依赖包(如npm/pip)以加速构建。
  • 监控与通知:集成GitHub Status Checks或第三方工具(如Slack)接收构建结果通知。

六、验证与调试

  1. 查看工作流日志:在仓库「Actions」标签页中查看运行状态和详细日志。
  2. 手动触发:通过「workflow_dispatch」事件手动运行工作流,方便调试。

通过以上步骤,可快速在GitHub上构建完整的CI/CD流程,实现代码从提交到部署的全流程自动化。