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注册邮箱"