服务器私有化部署gitlab社区版
社区版包4g,需要服务器上有足够的空间,部署私有化gitlab,配置端口,运行gitlab
安装gitRunner
Runner是CI/CD的执行者,运行你写的cicd文件,选择shell脚本,然后写yam文件,runner就会运行
- 注册Runner,将runner与gitlab建立连接
- runner有3种类型,共享(shared)Runner,组(group)Runner,项目(project)Runner
- 代码提交或者合并的时候触发流水线,gitlab ci就会放进队列,找合适的runner来执行ci
- 运行并反馈给gitlab
构建ci文件
skip ci\] 提交信息这样写,可以跳过执行流水线
配置流水线
- build
- test
- deploy
- 构建可以写一套,使用only来判断,只有某些分支才触发
- 认证服务器可以写成通用的(优化手段)
yml
# 工作流规则:只有push操作触发
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "push"'
# 定义阶段
stages:
- build # 构建阶段
- deploy_test # 测试环境部署
- deploy_prod # 生产环境部署
# 使用Node镜像
image: node:18
# 缓存node_modules加速构建
cache:
paths:
- node_modules/
# ==================== SSH密钥配置基座 ====================
.ssh_config:
before_script:
# 安装openssh-client(如果镜像没有)
- apt-get update && apt-get install -y openssh-client
# 创建SSH目录
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
# 写入私钥(从GitLab变量读取)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
# 添加服务器到known_hosts
- ssh-keyscan -H $SSH_HOST >> ~/.ssh/known_hosts
# ==================== 构建作业 ====================
build_job:
stage: build
only:
- test
- master
script:
- echo "📦 开始安装依赖..."
- npm ci
- echo "🔨 开始构建项目..."
- npm run build
- echo "✅ 构建完成"
artifacts:
paths:
- dist/
expire_in: 1 hour
# ==================== 测试环境部署 ====================
deploy_test:
extends: .ssh_config
stage: deploy_test
only:
- test
needs: ["build_job"]
variables:
SSH_HOST: $TEST_SSH_HOST
SSH_USER: $TEST_SSH_USER
DEPLOY_PATH: $TEST_DEPLOY_PATH
script:
- echo "🚀 开始部署到测试环境 ($SSH_HOST)..."
# 清理目标目录
- ssh $SSH_USER@$SSH_HOST "rm -rf $DEPLOY_PATH/*"
# 复制dist文件到服务器
- scp -r dist/* $SSH_USER@$SSH_HOST:$DEPLOY_PATH/
- echo "✅ 测试环境部署完成!"
# ==================== 生产环境部署 ====================
deploy_prod:
extends: .ssh_config
stage: deploy_prod
only:
- master
needs: ["build_job"]
variables:
SSH_HOST: $PROD_SSH_HOST
SSH_USER: $PROD_SSH_USER
DEPLOY_PATH: $PROD_DEPLOY_PATH
script:
- echo "🚀 开始部署到生产环境 ($SSH_HOST)..."
# 备份当前版本
- ssh $SSH_USER@$SSH_HOST "cp -r $DEPLOY_PATH ${DEPLOY_PATH}_backup_$(date +%Y%m%d_%H%M%S) || true"
# 部署新版本
- ssh $SSH_USER@$SSH_HOST "rm -rf $DEPLOY_PATH/*"
- scp -r dist/* $SSH_USER@$SSH_HOST:$DEPLOY_PATH/
# 如果是前端项目,可能需要reload nginx
- ssh $SSH_USER@$SSH_HOST "sudo nginx -s reload || true"
- echo "✅ 生产环境部署完成!"