实战经验

CI/CD是什么?让网站部署像发朋友圈一样简单

通过一次真实的手动部署事故,展示CI/CD如何解决"人为失误+流程混乱"导致的线上问题。读者记住的不是CI/CD的定义,而是"原来部署可以不用人肉操作"这个画面。独特细节:事故现场的错误配置、流水线搭建的完整过程、部署失败自动回滚的机制。

"文章详情面白屏!"

早上打开我的网站,正想查看一篇文章,详情页白屏。

我登录服务器,检查nginx日志,发现错误是"配置文件语法错误"。我昨晚改过nginx配置,手动上传的。大概是在vim里多敲了一个空格,或者括号没闭合。

修复、重启nginx、验证。十五分钟后,页面恢复了。

修复之后,我开始认真思考一个问题:为什么我每次部署都要靠"人肉"?为什么每次都要我手动ssh到服务器、手动拉代码、手动重启服务、手动验证?为什么每次都有概率因为一个拼写错误搞挂线上?

答案很简单:我没有CI/CD。

什么是CI/CD?

CI(Continuous Integration,持续集成):你每次提交代码,自动跑一遍测试,确保你的改动没把别人搞挂。

CD(Continuous Deployment,持续部署):测试通过后,自动把代码部署到线上,不需要你手动操作。

"像发朋友圈一样简单"——你写完内容,点发布,系统自动处理剩下的事情。不需要你手动上传图片、设置可见范围、选择发布时机。

CI/CD就是代码的"朋友圈发布系统"。

我是怎么搭建的

我的技术栈:前端Vue,后端Node.js,部署在阿里云ECS上。

第一步:选工具。

我试过Jenkins、GitLab CI、GitHub Actions。最终选了GitHub Actions,原因很简单:我的代码就在GitHub上,不需要额外配置认证,开箱即用。

第二步:写配置文件。

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

yamlname: Deploy to Production

on:
  push:
    branches: [main]  # 推送到main分支时触发

jobs:
  deploy:
    runs-on: ubuntu-latest
  
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
    
    - name: Install dependencies
      run: npm ci  # 用ci而不是install,确保依赖版本一致
    
    - name: Run tests
      run: npm test  # 测试不通过,流水线直接失败
    
    - name: Build
      run: npm run build
    
    - name: Deploy to server
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: ${{ secrets.SERVER_USER }}
        password: ${{ secrets.SERVER_PASSWORD }}
        script: |
          cd /var/www/myapp
          git pull origin main
          npm ci --production
          pm2 restart all  # 用pm2管理进程,自动重启

第三步:配置密钥。

在GitHub仓库的Settings → Secrets中添加服务器信息。这些密钥不会暴露在代码里,只有流水线能用到。

第四步:测试。

我故意在代码里写了一个语法错误,提交到main分支。流水线自动触发,测试失败,部署中断。完美。

然后我修复错误,再次提交。这次测试通过,代码自动部署到服务器。我打开浏览器,页面正常加载。

整个过程:2分17秒。

自从上了CI/CD,发生了几个变化:

部署时间从30分钟变成2分钟。

以前我要ssh到服务器、拉代码、重启服务、验证,现在只需要push代码。

人为失误几乎清零。上次手动部署搞挂线上,是因为我vim配错了一个空格。现在配置错误在测试阶段就会被拦截,根本到不了线上。

回滚变得简单。

如果部署后发现bug,只需要在GitHub上revert提交,流水线会自动回滚到上一个版本。以前回滚要手动操作,经常搞错版本。

心态变了。

以前部署前会紧张,生怕哪个步骤出错。现在部署变成了一件"无感"的事情——你提交代码,系统自动处理,你该干嘛干嘛。

写作后记

我写这篇文章,不是想推荐某个工具,而是想分享一个理念:把重复的、容易出错的工作交给机器,让人去做更有价值的事情。

如果你还在手动部署,我建议你从今天开始,写第一行流水线配置。不用完美,先跑起来。

登录收藏

评论 (0)

暂无评论,快来发表第一条评论吧