用构建工具搞定自动化部署,运维效率翻倍

每次上线新功能,还得手动打包、上传、重启服务?别说多麻烦了,光是重复操作就容易出错。上周我们组就是因为漏传一个配置文件,导致线上接口集体报错,排查了快一个小时才定位到问题。

别再手点了,让工具来跑流程

其实现在大多数项目都有现成的构建工具,比如前端常用的 Webpack、Vite,后端用的 Maven、Gradle,甚至 Python 项目也能用 Makefile 或 Poetry。这些工具不光能打包,还能串起一整套部署动作。

举个例子,你可以在 package.json 里写这么一条脚本:

"scripts": {
  "deploy": "npm run build && scp -r dist/ user@server:/var/www/html && ssh user@server 'systemctl restart nginx'"
}

执行 npm run deploy,自动完成编译、传输、重启 Nginx 三步操作。省得你一个命令一个命令敲,也不怕忘这忘那。

结合 CI/CD,提交代码就上线

更进一步,把构建脚本接入 GitLab CI 或 GitHub Actions。比如在项目根目录加个 .github/workflows/deploy.yml 文件:

name: Deploy
on:
  push:
    branches: [ main ]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: npm install && npm run build
      - name: Deploy to Server
        uses: appleboy/scp-action@v0.1.5
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.KEY }}
          source: "dist/"
          target: /var/www/html
      - name: Restart Service
        uses: appleboy/ssh-action@v0.1.6
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.KEY }}
          script: systemctl restart nginx

以后只要合并代码到主分支,系统自动走完流程,几分钟后新版本就在线上跑起来了。连“上线”这个动作都变得悄无声息。

别忘了权限和回滚

自动虽然方便,但也得留后路。建议每次部署前把旧版本备份一下,比如:

scp user@server:/var/www/html /backup/site_$(date +%Y%m%d_%H%M%S)

万一新版本炸了,马上切回去。另外,服务器上的 SSH 密钥、部署脚本权限要管好,别谁都可以上去跑一遍 deploy。

现在我们团队已经习惯这种节奏:开发完提 PR,CI 跑测试,合并后自动上线。运维不再是个“深夜加班改配置”的苦活,反而成了流程设计的一部分。省下来的时间,喝杯咖啡,看看日志,不香吗?