为什么需要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用户对目标目录有写入权限,可以使用chmod或chown调整。
2. 连接超时
检查服务器防火墙是否放行SSH端口,GitHub Actions的IP地址是动态的。
3. 构建失败
在Workflow中添加- name: Debug步骤,打印关键环境变量和文件状态进行调试。
总结
GitHub Actions让CI/CD变得前所未有的简单。通过YAML配置文件,我们可以轻松实现代码提交后的自动测试、构建和部署。建议从简单的workflow开始,逐步添加测试覆盖率报告、代码质量检查等功能,打造适合自己团队的最佳实践。
下一篇文章将深入探讨GitHub Actions的高级用法,包括自定义Action开发和与其他平台的集成。













暂无评论内容