从零搭建GitLab CI/CD流水线:踩过的坑全在这了

Raj Kumar | 2026-07-29T07:10:00 | DevOps

GitLab CI/CD从零搭建的完整教程,包含Runner配置、缓存优化、多阶段流水线和常见问题解决

# 从零搭建GitLab CI/CD流水线:踩过的坑全在这了 ## 前言 公司要从Jenkins迁移到GitLab CI/CD,这个活落到了我头上。搭建过程踩了不少坑,记录下来给后面的同学参考。 ## Runner配置 ```bash # 安装GitLab Runner curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash sudo apt-get install gitlab-runner # 注册Runner sudo gitlab-runner register \ --url https://gitlab.example.com \ --registration-token YOUR_TOKEN \ --executor docker \ --docker-image 'docker:20.10' ``` ### 踩坑:Docker in Docker > 最开始用dind总是报错,后来发现需要配置privileged模式和volume。 ## .gitlab-ci.yml 完整配置 ```yaml stages: - build - test - deploy variables: MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" # 缓存Maven依赖,加速构建 cache: key: maven-cache paths: - .m2/repository/ build: stage: build image: maven:3.8-openjdk-17 script: - mvn clean package -DskipTests artifacts: paths: - target/*.jar expire_in: 1 hour test: stage: test image: maven:3.8-openjdk-17 script: - mvn test artifacts: reports: junit: target/surefire-reports/TEST-*.xml deploy-prod: stage: deploy image: docker:20.10 only: - main script: - docker build -t app:latest . - docker push registry.example.com/app:latest when: manual ``` ## 常见问题 ### 坑1:缓存不生效 ```yaml # 错误:cache key写错 cache: key: "$CI_COMMIT_REF_SLUG" # 每个分支一个缓存,浪费空间 # 正确:固定key + 按文件hash cache: key: files: - pom.xml # pom变化时才更新缓存 ``` ### 坑2:artifacts太大 超过100MB的artifacts会导致流水线很慢,解决方案:只传必要文件 + 设过期时间。 ## 总结 - Runner推荐Docker executor - 善用cache加速构建 - artifacts设过期时间 - 生产部署用 `when: manual`

← Back to Blog