上线一个新网站,最烦人的不是写代码,而是每次改点东西都要手动上传文件、重启服务,一不小心还可能出错。最近我在折腾个人博客的时候,干脆把整个发布流程交给 GitLab CI 来跑,改完代码推上去,剩下的事它全包了,连刷新浏览器看效果都省了。
先搞清楚CI是啥
CI 全名叫持续集成(Continuous Integration),说白了就是你一提交代码,系统就自动帮你跑测试、打包、部署。GitLab 自带这套工具,不用额外搭 Jenkins 那种复杂玩意儿,对小项目特别友好。
关键一步:.gitlab-ci.yml 怎么写
在项目根目录加个 .gitlab-ci.yml 文件,这就是 CI 的“操作手册”。比如我这个静态博客,部署目标是一台云服务器,流程很简单:拉代码 → 生成页面 → 传到服务器。
stages:
- deploy
deploy_job:
stage: deploy
script:
- echo "开始部署..."
- npm install
- npm run build
- rsync -av public/ user@your-server.com:/var/www/html --delete
only:
- main
tags:
- runner-web
这里的 tags 要和你自己注册的 Runner 对得上。Runner 就是干活的机器,可以是本地电脑,也可以是云主机。我在家里那台一直开机的旧笔记本上装了个 GitLab Runner,专门跑这类任务。
怎么让服务器接受自动推送
上面用了 rsync 同步文件,得确保 CI 能登录服务器。别用密码,太不安全。推荐用 SSH 密钥:
在 Runner 主机上生成密钥对,把公钥放进服务器的 ~/.ssh/authorized_keys,私钥加到 GitLab 的 Deploy Keys 里。这样每次部署都不用手动输密码,也不怕被人撞库。
实际用起来有多方便
有次我在地铁上改了几行 CSS,想调个字体大小。手机上直接用 GitLab App 提交了修改,一抬头快到站了,顺手打开博客链接——新样式已经生效了。这种“写了就上线”的感觉,比以前还得连 VPS 敲命令强太多了。
遇到过的小坑
刚开始配的时候总失败,查日志发现是 rsync 命令没装。后来在 script 里加了 apt-get update && apt-get install -y rsync 才行。还有一次是权限问题,部署用户没法写 /var/www/html,得提前在服务器上把目录归属改好。
另外建议加个通知机制。我配了钉钉机器人,在部署成功或失败时发条消息,不用老去刷 CI 页面。看到绿勾那一刻,心里特别踏实。