宝塔面板与 GitLab 集成实现 DevOps 流程
标签搜索
侧边栏壁纸
  • 累计撰写 16 篇文章
  • 累计收到 0 条评论

宝塔面板与 GitLab 集成实现 DevOps 流程

ranyuan
2024-12-04 / 0 评论 / 19 阅读 / 正在检测是否收录...

宝塔面板与 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. 安装宝塔面板

  1. 安装宝塔面板

    yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
  2. 登录宝塔面板

    • 打开浏览器,访问 http://192.168.1.1:8888,使用安装时生成的用户名和密码登录。
    • 登陆进行LAMP或者LNMP环境安装
    • 安装宝塔Webhook
      2024-12-04T08:03:44.png

3. 配置 GitLab 仓库

  1. 创建 GitLab 仓库

    • 登录 GitLab,创建一个新的仓库(例如:project)。
  2. 配置 Git 认证

    • 生成一个 GitLab 访问令牌(Token),用于自动化脚本中的 Git 操作。

4. 配置 Webhook

  1. 配置 Webhook 脚本

    • 在宝塔面板中,创建一个新的 Webhook 脚本,用于处理 GitLab 的推送事件。将自动化脚本填写在其中
  2. 创建 Webhook

    • 在 GitLab 仓库的设置中,找到 Webhooks 选项。
    • 添加一个新的 Webhook,URL 为 http://192.168.1.1:8888/你的Webhook路径,触发来源选择推送http://192.168.1.1:8888/webhook
      2024-12-04T08:07:19.png
      2024-12-04T08:07:55.png
      2024-12-04T08:08:35.png

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

评论 (0)

取消