您现在的位置是:网站首页 > 拒绝 CI/CD(“本地打包再上传就行”)文章详情

拒绝 CI/CD(“本地打包再上传就行”)

拒绝 CI/CD(“本地打包再上传就行”)的代价

CI/CD(持续集成/持续部署)是现代前端工程的标准实践,但总有人坚持“本地打包再上传就行”的工作模式。这种看似简单的操作背后隐藏着巨大的技术债务和团队协作风险。

手工操作引发的版本灾难

手动打包上传最直接的问题是版本混乱。当多个开发者并行开发时,很容易出现版本覆盖:

# 典型的手工操作流程
npm run build
scp -r dist/* user@server:/path/to/prod

假设开发者A刚上传了v1.2.0,开发者B本地还是v1.1.0的代码,一次不经意的上传就会导致版本回退。更可怕的是这种问题往往要到用户反馈才能发现。

环境差异导致的“在我机器上能跑”

没有CI/CD意味着每台开发机的构建环境都可能不同。考虑以下场景:

// package.json
{
  "scripts": {
    "build": "webpack --mode=production"
  },
  "devDependencies": {
    "webpack": "^4.0.0" 
  }
}

开发者C的Node版本是14.x,开发者D用的是16.x,同样的npm install可能安装不同的小版本webpack,最终生成的bundle hash完全不同。这种隐蔽的环境问题可能让线上代码表现异常。

缺乏自动化测试的勇气

手工部署流程中,单元测试和E2E测试往往被忽略:

// 本该在CI中运行的测试
describe('Button组件', () => {
  it('点击时触发回调', () => {
    const mockFn = jest.fn()
    render(<Button onClick={mockFn} />)
    fireEvent.click(screen.getByRole('button'))
    expect(mockFn).toHaveBeenCalled()
  })
})

没有自动化测试保障,每次部署都像俄罗斯轮盘赌——可能这次没事,但下次就会触发未捕获的边界条件错误。

部署过程的黑箱操作

手工部署缺乏可追溯性。当线上出现问题时,你无法快速回答:

  • 这次部署包含哪些代码变更?
  • 是谁在什么时候执行的部署?
  • 构建时的环境变量是什么?

对比CI/CD系统的完整日志记录,手工操作就像在黑暗中摸索。

回滚机制的缺失

当线上出现严重bug时,手工部署者常用的“解决方案”是:

git checkout HEAD~1
npm run build
scp -r dist/* user@server:/path/to/prod

这种回滚方式存在致命缺陷:

  1. 可能回滚到包含其他问题的历史版本
  2. 静态资源缓存会导致新旧版本资源混合
  3. 无法保证回滚后的数据库/API兼容性

团队协作的噩梦

在没有CI/CD的团队中,常听到这样的对话:

  • “你上传代码前怎么不跟我说一声?”
  • “我本地跑得好好的,怎么线上就挂了?”
  • “这次打包你改webpack配置了吗?”

这种协作模式让代码部署变成零和博弈,严重拖慢迭代速度。

安全风险的温床

手工部署往往需要直接的生产服务器访问权限。当开发者离职时:

  • SSH密钥可能还留在其电脑上
  • 服务器密码可能通过聊天工具传播过
  • 敏感的.env文件可能被意外打包上传

CI/CD系统通过RBAC(基于角色的访问控制)可以精确控制每个人的操作权限。

性能优化的阻碍

现代前端优化如代码分割、tree-shaking、缓存策略等都需要稳定的构建环境:

// webpack.config.js
output: {
  filename: '[name].[contenthash:8].js',
  chunkFilename: '[name].[contenthash:8].chunk.js'
}

手工部署时,开发者可能会因为“构建太慢”而禁用这些优化,或者因为hash不稳定导致缓存失效。

持续交付文化的缺失

拒绝CI/CD不仅是技术选择,更是团队文化的体现。这样的团队通常:

  • 恐惧频繁部署,积累大量变更后“赌一把”
  • 没有部署checklist,靠个人记忆
  • 将部署视为“运维工作”而非开发环节

这种文化会导致迭代速度随着项目增长指数级下降。

基础设施即代码的逆行者

现代前端工程强调用代码管理基础设施:

# GitHub Actions示例
name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: npm ci
      - run: npm test
      - run: npm run build
      - uses: actions/upload-artifact@v2
        with:
          name: dist
          path: dist

手工部署团队却维护着口口相传的“部署秘籍.txt”,新成员需要踩过所有坑才能掌握部署流程。

监控能力的先天不足

没有CI/CD的团队往往也缺乏完善的监控。当出现问题时:

  • 无法自动触发异常构建的警报
  • 没有构建时长趋势分析
  • 缺少版本与错误日志的自动关联

这使得线上问题像幽灵般难以追踪。

现代前端生态的局外人

越来越多的工具链基于CI/CD设计:

  • Chromatic用于Visual Testing
  • Storybook Deployment
  • Lighthouse CI
  • Bundle Size限制

拒绝CI/CD就像在智能手机时代坚持用传呼机,最终会被生态淘汰。

我的名片

网名:~川~

岗位:console.log 调试员

坐标:重庆市-九龙坡区

邮箱:cc@qdcc.cn

沙漏人生

站点信息

  • 建站时间:2013/03/16
  • 本站运行
  • 文章数量
  • 总访问量
微信公众号
每次关注
都是向财富自由迈进的一步