CI/CD流水线搭建:GitHub Actions实战教程


CI/CD流水线搭建:GitHub Actions实战教程

CI/CD(持续集成/持续部署)是现代软件开发的核心实践,它通过自动化的构建、测试和部署流程,确保每次代码变更都经过充分验证后安全地发布到生产环境。GitHub Actions是目前最受欢迎的CI/CD工具之一,它直接集成在GitHub中,配置简单且免费额度充足。本文将通过实际案例手把手教你搭建完整的CI/CD流水线。

一、GitHub Actions基础概念

GitHub Actions的核心概念包括:

  • Workflow(工作流):自动化流程,定义在YAML文件中
  • Event(事件):触发工作流的条件(push、PR、定时等)
  • Job(任务):工作流中的一组步骤,可以并行或串行执行
  • Step(步骤):Job中的单个操作,可以是shell命令或Action
  • Action(动作):可复用的操作单元

二、PHP项目CI流水线

# .github/workflows/ci.yml
name: CI

on:
  push:
    branches: [master, develop]
  pull_request:
    branches: [master]

jobs:
  test:
    runs-on: ubuntu-latest
    
    strategy:
      matrix:
        php-version: ["7.4", "8.0", "8.1", "8.2"]
    
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: test_db
        ports:
          - 3306:3306
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=3
      
      redis:
        image: redis:7-alpine
        ports:
          - 6379:6379
    
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-version }}
          extensions: pdo_mysql, redis, gd, zip
          coverage: xdebug
      
      - name: Install Dependencies
        run: composer install --prefer-dist --no-progress
      
      - name: Copy Environment File
        run: cp .env.sample .env
      
      - name: Run Tests
        run: vendor/bin/phpunit --coverage-text
      
      - name: PHP CodeSniffer
        run: vendor/bin/phpcs --standard=PSR12 app/
      
      - name: PHPStan Analysis
        run: vendor/bin/phpstan analyse app/ --level=5

三、自动部署流水线

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches: [master]

jobs:
  deploy:
    runs-on: ubuntu-latest
    needs: [test]  # 测试通过后才部署
    if: github.ref == "refs/heads/master"
    
    environment: production
    
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: "8.2"
      
      - name: Install Dependencies (Production)
        run: composer install --no-dev --optimize-autoloader --no-progress
      
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /var/www/myapp
            git pull origin master
            composer install --no-dev --optimize-autoloader
            php think migrate:run
            php think cache:clear
            sudo systemctl reload php-fpm
            sudo systemctl reload nginx
      
      - name: Send Deploy Notification
        if: always()
        run: |
          curl -X POST "https://api.example.com/notify" 
            -H "Content-Type: application/json" 
            -d "{"status": "${{ job.status }}", "commit": "${{ github.sha }}"}"

四、定时任务与矩阵构建

# 定时检查依赖安全性
name: Security Check

on:
  schedule:
    - cron: "0 6 * * 1"  # 每周一早上6点

jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Check PHP Dependencies
        run: composer audit
      
      - name: Check Node Dependencies
        run: npm audit --production

五、缓存与Artifact

steps:
  # 缓存Composer依赖
  - name: Cache Composer packages
    uses: actions/cache@v3
    with:
      path: vendor
      key: php-${{ hashFiles("composer.lock") }}
      restore-keys: php-
  
  # 上传构建产物
  - name: Upload Build Artifact
    uses: actions/upload-artifact@v3
    with:
      name: app-build
      path: |
        app/
        public/
        vendor/
      retention-days: 5

CI/CD流水线是现代化开发的标配。通过GitHub Actions,你可以在不离开GitHub生态的情况下,实现从代码提交到生产部署的全自动化。建议从简单的CI(自动运行测试)开始,逐步添加代码质量检查、安全扫描、自动部署等环节,构建一个完善的DevOps流程。


0.069510s