
1. GitLab流水线基础概念第一次接触GitLab流水线时我完全不明白这个自动化工作流到底能做什么。直到有次手动部署项目时连续三次忘记执行npm install才意识到自动化的重要性。简单来说GitLab流水线就像个智能管家你只需要告诉它代码更新后先打包、再测试、最后部署它就会严格按照这个流程执行。核心组件其实就三个.gitlab-ci.yml放在项目根目录的配置文件相当于管家的操作手册Runner实际干活的工人可以是云服务器、本地机器甚至容器Pipeline每次代码变更触发的一次完整执行过程我刚开始总把Runner和Pipeline搞混。后来发现个生活化的类比Runner像是厨房里的厨师而Pipeline则是从下单到上菜的完整流程。一个厨房项目可以有多个厨师Runner但每份订单代码提交只会生成一条流水线。2. 准备你的第一个流水线2.1 创建配置文件在你的项目根目录新建.gitlab-ci.yml文件这是我的入门模板stages: - build - test - deploy build_job: stage: build script: - echo 安装依赖... - npm install - npm run build artifacts: paths: - dist/ test_job: stage: test script: - echo 运行单元测试... - npm test deploy_job: stage: deploy script: - echo 模拟部署到生产环境... - ls -la dist/ only: - main这个配置做了三件事定义三个阶段构建→测试→部署build阶段会生成dist目录并保留产物只有main分支的提交会触发部署2.2 配置Runner没有Runner的流水线就像没有厨师的餐厅。在GitLab项目设置→CI/CD→Runners页面你会看到两种选择共享RunnerGitLab官方提供适合快速体验专用Runner自己搭建推荐生产环境使用我在测试时遇到过Runner显示未激活的情况通常是因为服务器防火墙阻止了Runner注册注册时填错了GitLab实例URLRunner版本太旧不兼容3. 进阶流水线技巧3.1 使用Docker优化环境直接在服务器装环境太麻烦用Docker可以秒切不同环境image: node:16 build_job: script: - node -v # 这里会显示Node 16版本3.2 并行执行测试通过parallel关键字可以并行跑测试节省时间test_job: stage: test parallel: 3 script: - echo 运行测试套件$CI_NODE_INDEX - npm run test:part$CI_NODE_INDEX3.3 手动确认部署生产环境部署最好加个手动确认deploy_prod: stage: deploy script: - ./deploy.sh when: manual only: - main4. 调试与优化4.1 查看日志流水线失败时我最常做的三件事点开失败job的查看日志检查错误堆栈的最后几行本地复现相同命令4.2 缓存优化合理使用缓存可以大幅加速构建cache: key: $CI_COMMIT_REF_SLUG paths: - node_modules/ - .npm/4.3 超时处理遇到过几次构建卡死后来加了超时设置build_job: script: [...] timeout: 30m # 默认是1小时5. 真实项目案例最近给Vue项目配置的完整流水线image: node:16 stages: - install - lint - build - test - deploy cache: key: $CI_COMMIT_REF_SLUG paths: - node_modules/ install_deps: stage: install script: - npm ci --prefer-offline only: changes: - package-lock.json eslint: stage: lint script: - npm run lint build_prod: stage: build script: - npm run build artifacts: paths: - dist/ expire_in: 1 week cypress_test: stage: test script: - npm run test:e2e environment: name: test url: https://test.example.com deploy_staging: stage: deploy script: - scp -r dist/* userstaging:/var/www when: manual only: - develop deploy_prod: stage: deploy script: - ./scripts/deploy-prod.sh when: manual only: - main这个配置实现了依赖变更时才重新install代码质量检查构建产物保留一周分层部署测试环境→生产环境