简易的GitLab CI/CD教程
为了实现跨服务器的GitLab CI/CD自动部署,按照以下步骤操作:
一、解决网络连通性问题
确认网络互通
- 确保
10.0.0.117
(GitLab) 和10.0.0.93
(应用服务器) 之间网络可达 - 测试命令:
ping 10.0.0.93
(从GitLab服务器执行)
- 确保
开放SSH端口
确保应用服务器的
22
端口对GitLab Runner开放如有防火墙:
bashsudo ufw allow from 10.0.0.117 to any port 22
二、配置应用服务器SSH免密登录
创建专用部署账户
bashsudo useradd -m deploy sudo passwd deploy # 设置密码(可选)
生成SSH密钥对
在GitLab Runner所在服务器(或直接在GitLab CI环境中)执行:
bashssh-keygen -t ed25519 -f ~/.ssh/gitlab_deploy
上传公钥到应用服务器
bashssh-copy-id -i ~/.ssh/gitlab_deploy.pub deploy@10.0.0.93
测试SSH连接
bashssh -i ~/.ssh/gitlab_deploy deploy@10.0.0.93
三、配置GitLab CI/CD
准备部署脚本 在项目根目录创建
scripts/deploy.sh
:bash#!/bin/bash set -e # 进入项目目录 cd /home/deploy/your-project-path # 拉取最新代码 git checkout dev git pull origin dev # 执行构建部署命令(根据实际脚本调整) ./mvnw clean package systemctl restart your-app.service
配置.gitlab-ci.yml
yamlstages: - deploy deploy_dev: stage: deploy only: - dev # 只在dev分支有变更时触发 script: - chmod 600 $SSH_PRIVATE_KEY - ssh -o StrictHostKeyChecking=no -i $SSH_PRIVATE_KEY deploy@10.0.0.93 "bash -s" < ./scripts/deploy.sh
设置CI/CD环境变量 在GitLab仓库设置 ➔ CI/CD ➔ Variables:
SSH_PRIVATE_KEY
:粘贴之前生成的私钥内容(gitlab_deploy
)SSH_HOST
:10.0.0.93
SSH_USER
:deploy
四、配置合并自动触发(可选)
保护分支设置
- 进入仓库设置 ➔ Repository ➔ Protected Branches
- 保护
dev
分支,要求合并请求(MR)通过CI
合并请求流水线 在
.gitlab-ci.yml
添加:yamlworkflow: rules: - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev" - when: always
五、验证部署
手动触发测试
bashgit commit --allow-empty -m "Trigger CI/CD" git push origin dev
查看流水线日志
- 进入GitLab ➔ CI/CD ➔ Pipelines
- 检查作业日志是否显示成功部署
六、高级配置建议
使用Ansible进行部署(复杂场景)
yamldeploy: script: - ansible-playbook -i inventories/production deploy.yml
配置Webhook通知
- 在部署成功后发送通知到Slack/钉钉
回滚机制
bash# deploy.sh中添加 git reflog git reset --hard HEAD@{1}
遇到问题排查方向:
- 检查SSH密钥权限是否为
600
- 查看应用服务器
/var/log/auth.log
确认SSH登录尝试 - 在CI脚本中添加
set -x
显示详细执行信息 - 确保部署账户有项目目录的写权限
通过以上配置,每次向dev分支推送变更或合并其他分支到dev时,GitLab CI/CD将自动完成部署到应用服务器的全过程。