GitLab CI/CD 是 GitLab 提供的持续集成和持续部署工具,能够自动化完成代码测试、构建和部署等流程。下述是一个基础的 GitLab CI/CD 自动部署指南,帮助你快速上手:
项目代码仓库: 确保代码已托管在 GitLab 仓库中。
部署目标服务器: 准备用于部署的服务器(如测试环境、生产环境)。
访问权限: 确保 GitLab Runner 有权限访问部署服务器(如 SSH 密钥配置)。
.gitlab-ci.yml
文件在项目根目录创建 .gitlab-ci.yml
文件,定义 CI/CD 流水线阶段。下述是一个典型示例:
stages:
- build
- test
- deploy
# 缓存依赖项(如 Node.js 的 node_modules)
cache:
paths:
- node_modules/
# 阶段 1: 构建项目
build_job:
stage: build
script:
- npm install
- npm run build
artifacts:
paths:
- dist/ # 构建产物目录
only:
- main # 仅 main 分支触发
# 阶段 2: 运行测试
test_job:
stage: test
script:
- npm test
# 阶段 3: 部署到服务器
deploy_production:
stage: deploy
script:
- echo "Deploying to production server..."
- ssh user@production-server "cd /path/to/project && git pull origin main && npm install && pm2 restart app"
only:
- main
安装 GitLab Runner
在服务器或本地机器上安装 GitLab Runner(参考官方文档)。
注册 Runner
在项目设置中获取 Runner Token,运行下述命令注册:
gitlab-runner register
选择执行器类型(如 shell
、docker
等)。
在 GitLab Runner 所在机器生成 SSH 密钥:
ssh-keygen -t rsa
将公钥 id_rsa.pub
内容添加到部署服务器的 ~/.ssh/authorized_keys
文件中。
通过 GitLab Settings > CI/CD > Variables 添加环境变量(如 SSH_PRIVATE_KEY
, PRODUCTION_SERVER_IP
),在脚本中通过 $VARIABLE_NAME
引用。
示例修改后的 deploy
阶段:
deploy_production:
stage: deploy
script:
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh -o StrictHostKeyChecking=no user@$PRODUCTION_SERVER_IP "cd /path/to/project && git pull && npm install && pm2 restart app"
如果希望手动触发部署,添加 when: manual
:
deploy_production:
stage: deploy
script: [...]
when: manual
deploy_job:
stage: deploy
image: docker:latest
services:
- docker:dind
script:
- docker build -t my-app .
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker push my-app:latest
- ssh user@server "docker pull my-app:latest && docker-compose up -d"
deploy_job:
stage: deploy
script:
- kubectl apply -f kubernetes/deployment.yaml
- kubectl rollout restart deployment/my-app
查看流水线日志: 在 GitLab 项目页面的 CI/CD > Pipelines 中查看执行日志。
缓存优化: 合理配置 cache
或 artifacts
加快流水线速度。
并行执行: 使用 parallel
关键字并行运行任务。
通过以上步骤你可以以实现从代码提交到自动部署的完整流程。根据实际项目需求调整 .gitlab-ci.yml
中的脚本(如替换 npm
为 yarn
、调整部署命令等)。