1. 前提条件
确保Linux服务器已安装GitLab(若未安装,可参考官方文档通过apt/yum安装GitLab CE),且具备管理员权限。
2. 安装GitLab Runner
GitLab Runner是执行CI/CD任务的代理,需先安装并注册:
# 添加GitLab Runner的GPG密钥和软件源
curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/install/repositories/runner/gitlab-runner/gpgkey
echo "deb https://packages.gitlab.com/runner/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
# 更新包列表并安装
sudo apt-get update
sudo apt-get install gitlab-runner -y
https://gitlab.com)和注册Token(从GitLab项目→Settings→CI/CD→Runners获取):sudo gitlab-runner register
选择执行器(推荐shell(简单任务)或docker(隔离环境)),设置Runner描述(如My Linux Runner)和标签(如ci,deploy)。3. 创建.gitlab-ci.yml配置文件
在项目根目录下创建.gitlab-ci.yml文件,定义CI/CD流程(核心结构包括stages、jobs):
stages:
- compile
- test
- build
- deploy
# 编译阶段:使用Maven打包
compile:
stage: compile
script:
- echo "Compiling code..."
- mvn clean compile
artifacts:
paths:
- target/classes/ # 传递给后续job的产物
# 测试阶段:运行单元测试
test:
stage: test
script:
- echo "Running tests..."
- mvn test
# 构建阶段:生成Docker镜像
build:
stage: build
image: docker:latest # 使用Docker镜像
services:
- docker:dind # 启用Docker-in-Docker
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: "" # 禁用TLS(仅测试环境)
script:
- echo "Building Docker image..."
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
only:
- master # 仅master分支触发
# 部署阶段:将镜像部署到Kubernetes
deploy:
stage: deploy
image: bitnami/kubectl:latest
script:
- echo "Deploying to Kubernetes..."
- kubectl set image deployment/my-app my-app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
only:
- master
stages:定义流程阶段(顺序执行,前一个阶段成功才会触发下一个);artifacts:传递上一job的产物(如编译后的文件)给后续job;only:指定触发分支(如master或main);image:指定job运行的容器镜像(如node:latest、python:3.9);services:配合image使用的辅助服务(如Docker-in-Docker)。4. 配置GitLab项目
CI_REGISTRY_USER、CI_REGISTRY_PASSWORD、服务器SSH密钥),避免硬编码在.gitlab-ci.yml中。5. 触发CI/CD流程
将.gitlab-ci.yml文件提交到GitLab仓库的指定分支(如master),GitLab会自动检测文件并触发流水线:
git add .gitlab-ci.yml
git commit -m "Add GitLab CI/CD configuration"
git push origin master
可在GitLab项目→CI/CD→Pipelines页面查看流水线状态(成功/失败)、各job日志及执行时间。
6. 进阶优化
node_modules或Maven本地仓库):cache:
paths:
- node_modules/ # Node.js项目
- .m2/repository/ # Maven项目
test_unit:
stage: test
script: echo "Running unit tests..."
test_integration:
stage: test
script: echo "Running integration tests..."