宝塔面板与 GitLab 集成实现 DevOps 流程
1. 环境准备
- 服务器:一台安装了宝塔面板的服务器(IP:
192.168.1.1
,端口:8888
)。 - GitLab:一个 GitLab 仓库(URL:
http://gitlab.test.com/v1/project.git
)。 - 项目路径:本地项目路径为
/www/wwwroot/test.com
,远程服务器路径为/www/wwwroot/test.com
。
2. 安装宝塔面板
安装宝塔面板:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
登录宝塔面板:
- 打开浏览器,访问
http://192.168.1.1:8888
,使用安装时生成的用户名和密码登录。 - 登陆进行LAMP或者LNMP环境安装
- 安装宝塔Webhook
- 打开浏览器,访问
3. 配置 GitLab 仓库
创建 GitLab 仓库:
- 登录 GitLab,创建一个新的仓库(例如:
project
)。
- 登录 GitLab,创建一个新的仓库(例如:
配置 Git 认证:
- 生成一个 GitLab 访问令牌(Token),用于自动化脚本中的 Git 操作。
4. 配置 Webhook
配置 Webhook 脚本:
- 在宝塔面板中,创建一个新的 Webhook 脚本,用于处理 GitLab 的推送事件。将自动化脚本填写在其中
创建 Webhook:
- 在 GitLab 仓库的设置中,找到
Webhooks
选项。 - 添加一个新的 Webhook,URL 为
http://192.168.1.1:8888/你的Webhook路径
,触发来源选择推送http://192.168.1.1:8888/webhook
。
- 在 GitLab 仓库的设置中,找到
5. 自动化脚本
我们将编写一个 Bash 脚本,用于自动拉取 GitLab 仓库的最新代码,并使用 rsync
将代码同步到远程服务器。
#!/bin/bash
set -x # 启用调试模式,输出详细执行信息
LOGFILE="/var/log/webhook_doc.log"
GIT=$(which git)
echo "" >> $LOGFILE
echo "=====================================" >> $LOGFILE
echo "Webhook triggered at $(date "+%Y-%m-%d %H:%M:%S")" >> $LOGFILE
# Git 认证信息
GIT_USER="username"
GIT_TOKEN="passwd" # 替换为你的实际访问令牌
# Git项目路径
projectPath="/www/wwwroot/test.com"
gitHttp="http://gitlab.test.com/v1/project.git" # 替换为你的实际 Git 仓库地址
# 远程服务器信息
REMOTE_USER="root"
REMOTE_HOST="192.168.1.1"
REMOTE_DIR="/www/wwwroot/test.com"
REMOTE_PORT="22" # 远程服务器的SSH端口
# 检查项目路径是否存在
if [ ! -d "$projectPath" ]; then
echo "项目根路径 $projectPath 不存在" >> $LOGFILE
echo "新建项目根目录" >> $LOGFILE
mkdir -p $projectPath || { echo "创建项目根目录失败" >> $LOGFILE; exit 1; }
chown -R www:www $projectPath || { echo "设置项目根目录权限失败" >> $LOGFILE; exit 1; }
fi
cd $projectPath || { echo "无法进入目录 $projectPath" >> $LOGFILE; exit 1; }
# 判断 .git 目录是否存在
if [ ! -d ".git" ]; then
echo "项目尚未克隆,开始克隆 Git 仓库" >> $LOGFILE
# 配置 Git 认证信息
git config --global url."https://${GIT_USER}:${GIT_TOKEN}@gitlab.test.com".insteadOf "https://gitlab.test.com"
git clone $gitHttp . || { echo "Git clone 失败" >> $LOGFILE; exit 1; }
chown -R www:www $projectPath || { echo "设置项目根目录权限失败" >> $LOGFILE; exit 1; }
else
echo "项目已经克隆,直接拉取最新代码" >> $LOGFILE
fi
# 拉取最新的项目文件
if [ -d ".git" ]; then
echo "拉取最新的项目文件" >> $LOGFILE
git fetch --all 2>&1 | tee -a $LOGFILE || { echo "Git fetch 失败" >> $LOGFILE; exit 1; }
git pull origin main 2>&1 | tee -a $LOGFILE || { echo "Git pull 失败" >> $LOGFILE; exit 1; }
echo "Git 状态:" >> $LOGFILE
git status >> $LOGFILE 2>&1 || { echo "获取 Git 状态失败" >> $LOGFILE; exit 1; }
else
echo "不是一个有效的 Git 仓库" >> $LOGFILE
exit 1
fi
# 确保文件权限正确
chown -R www:www $projectPath || { echo "设置项目根目录权限失败" >> $LOGFILE; exit 1; }
# 设置目录权限为 755,文件权限为 644
find $projectPath -type d -exec chmod 755 {} \;
find $projectPath -type f -exec chmod 644 {} \;
# 使用 rsync 将代码推送到远程服务器
echo "开始将代码同步到远程服务器..." >> $LOGFILE
rsync -avz --delete --no-perms -e "ssh -p $REMOTE_PORT" $projectPath/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ >> $LOGFILE 2>&1
if [ $? -eq 0 ]; then
echo "代码同步到远程服务器成功" >> $LOGFILE
else
echo "代码同步到远程服务器失败" >> $LOGFILE
exit 1
fi
echo "End" >> $LOGFILE
exit 0
注意点 因为我提前配置了远程服务器的ssh免密登陆 所以这里不需要再输入密码
git pull方式为http
如果未初始化本地仓库建议可以先Git Clone到本地 输出日志目录也可以自定义
总结
通过上述步骤,你可以使用宝塔面板和 GitLab 实现一个简单的 DevOps 流程。通过 Webhook 自动触发代码部署,并使用 rsync
将代码同步到远程服务器。这样可以确保代码的自动更新和部署,提高开发效率。
评论 (0)