GitHub Actions CI/CD实战:从零搭建自动化部署流水线

为什么需要CI/CD?

在团队协作开发中,手动部署不仅耗时耗力,还容易出现人为错误。GitHub Actions作为GitHub官方提供的CI/CD平台,能够帮助我们实现代码提交后的自动构建、测试和部署,极大提升开发效率。

GitHub Actions核心概念

1. Workflow(工作流)

工作流是一个可配置的自动化流程,定义在.github/workflows目录下的YAML文件中。一个仓库可以有多个工作流,每个工作流由一个或多个Job组成。

2. Job(作业)

Job是工作流的基本执行单元,包含多个Step。默认情况下,同一工作流中的Jobs并行执行,也可以配置为顺序执行。

3. Step(步骤)

Step是Job中的最小执行单元,可以是执行命令或调用Action。每个Step运行在独立的shell环境中。

实战:搭建Node.js项目自动部署流水线

第一步:创建工作流文件

在项目根目录创建.github/workflows/deploy.yml

name: CI/CD Pipeline

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

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout代码
      uses: actions/checkout@v4
      
    - name: Setup Node.js
      uses: actions/setup-node@v4
      with:
        node-version: '20'
        cache: 'npm'
        
    - name: 安装依赖
      run: npm ci
      
    - name: 运行测试
      run: npm test
      
    - name: 构建项目
      run: npm run build
      
    - name: 上传构建产物
      uses: actions/upload-artifact@v4
      with:
        name: build-files
        path: dist/

第二步:添加自动部署配置

在同一个文件中添加部署Job:

  deploy:
    needs: build-and-test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    
    steps:
    - name: 下载构建产物
      uses: actions/download-artifact@v4
      with:
        name: build-files
        path: dist/
        
    - name: 部署到服务器
      uses: appleboy/ssh-action@v1.0.3
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: ${{ secrets.SERVER_USER }}
        key: ${{ secrets.SERVER_SSH_KEY }}
        source: "dist/*"
        target: "/var/www/html"
        strip_components: 1

第三步:配置Secrets

进入GitHub仓库的Settings → Secrets and variables → Actions,添加以下密钥:

  • SERVER_HOST:服务器IP地址
  • SERVER_USER:SSH登录用户名
  • SERVER_SSH_KEY:SSH私钥内容

⚠️ 注意:SSH私钥需要在服务器上配置好对应的公钥,并确保用户有写入目标目录的权限。

进阶技巧:矩阵构建

当项目需要支持多个Node.js版本时,可以使用矩阵策略:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]
        
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci && npm test

缓存优化

为了加速构建,可以缓存npm依赖:

- name: 缓存npm依赖
  uses: actions/cache@v4
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-

常见问题排查

1. 权限问题

确保SSH用户对目标目录有写入权限,可以使用chmodchown调整。

2. 连接超时

检查服务器防火墙是否放行SSH端口,GitHub Actions的IP地址是动态的。

3. 构建失败

在Workflow中添加- name: Debug步骤,打印关键环境变量和文件状态进行调试。

总结

GitHub Actions让CI/CD变得前所未有的简单。通过YAML配置文件,我们可以轻松实现代码提交后的自动测试、构建和部署。建议从简单的workflow开始,逐步添加测试覆盖率报告、代码质量检查等功能,打造适合自己团队的最佳实践。

下一篇文章将深入探讨GitHub Actions的高级用法,包括自定义Action开发和与其他平台的集成。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容