← 返回首页

git 代码实时同步更新到宝塔

2023年1月5日 #webhook #git #宝塔

使用宝塔git生成公钥

首先去宝塔终端查看是否有装git(一般默认是安装了的)

生成公钥,输入下面命令后回车三下

ssh-keygen -t rsa

查看公钥,按顺序输入下面代码,最后一个是获取密钥,cat 后面是公钥文件名

cd ~/.ssh
ls
cat id_rsa.pub

创建Gitee仓库,添加公钥

仓库就简单的默认仓库就好,要记好仓库名。 进入仓库管理的添加公钥功能,将上面复制的密钥copy进底下后,标题会自动生成,直接点击添加即可。

执行脚本代码(健全版)

#!/bin/bash

# ===== 日志开始 =====
echo ""
echo "=============================="
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "开始执行 webhook"
echo "当前用户: $(whoami)"
echo "当前目录: $(pwd)"
echo "PATH: $PATH"
echo "=============================="

# 遇到错误直接退出
set -e

# git项目路径
gitPath="/www/wwwroot/项目名称"
gitHttp="https://gitee.com/项目作者/项目名称.git"

echo "项目路径: $gitPath"

# ===== 检查 git =====
echo "git版本:"
git --version || echo "git 不存在!"

# ===== 检查目录 =====
if [ -d "$gitPath" ]; then
    echo "目录存在"
else
    echo "目录不存在,创建"
    mkdir -p $gitPath
fi

cd $gitPath

echo "进入目录后: $(pwd)"
ls -al

# ===== 修复 safe.directory(关键)=====
git config --global --add safe.directory $gitPath || true

# ===== 如果没有 .git =====
if [ ! -d ".git" ]; then
    echo "未检测到 .git,开始 clone"

    rm -rf *
    
    git clone $gitHttp . || {
        echo "❌ git clone 失败"
        exit 1
    }
else
    echo "检测到 .git"
fi

# ===== 检查远程 =====
echo "远程仓库信息:"
git remote -v

# ===== 当前分支 =====
branch=$(git symbolic-ref --short HEAD || echo "master")
echo "当前分支: $branch"

# ===== 强制同步 =====
echo "开始 reset"
git fetch --all

git reset --hard origin/$branch || {
    echo "❌ reset 失败"
    exit 1
}

echo "开始 pull"
git pull origin $branch || {
    echo "❌ pull 失败"
    exit 1
}

# ===== 文件确认 =====
echo "拉取后文件:"
ls -al | head -20

# ===== Node 处理 =====
if [ -f "package.json" ]; then
    echo "检测到 Node 项目"

    which npm || echo "❌ npm 不存在"

    npm install --production || echo "❌ npm install 失败"
fi

# ===== PHP 依赖 =====
if [ -f "composer.json" ]; then
    echo "检测到 PHP 项目,安装依赖"

    which composer || echo "⚠️ composer 未安装"

    composer install --no-dev --optimize-autoloader || echo "❌ composer install 失败"
fi

# ===== 权限 =====
echo "设置权限"
chown -R www:www $gitPath

echo "执行完成"
echo "=============================="

指定php版本:

PHP_BIN="/www/server/php/73/bin/php"
COMPOSER="/usr/bin/composer"

$PHP_BIN $COMPOSER install --no-dev --optimize-autoloader

指定node版本

NODE_BIN="/www/server/nodejs/v18.19.0/bin/node"
NPM_BIN="/www/server/nodejs/v18.19.0/bin/npm"

$NPM_BIN install --production
$NPM_BIN run build

身份验证

如果遇到无法同步代码的情况,还有一个操作。 在宝塔终端里,配置git身份

git config --global user.name "gitee用户名"
git config --global user.email "gitee注册邮箱"