宝塔 WebHook 自动部署 GitLab / GitHub 代码

在宝塔面板配置 WebHook,用 SSH 密钥拉取 GitLab 或 GitHub 仓库,推送后自动执行 git pull 更新站点,实现代码一键部署。

使用密钥

#!/bin/bash

echo "----------------"
# 输出当前时间
date "+%Y-%m-%d %H:%M:%S"
echo "开始执行"

# 设置 SSH 密钥文件路径
sshKeyPath="~/.ssh/******"    # SSH 密钥文件路径

# 获取Git分支名称
branch="main"
# 将Git项目存入宝塔路径
gitPath="/www/wwwroot/******"
# Git仓库地址
httpGit="git@gitlab.com:******/******.git"

# 使用 SSH 密钥进行身份验证
export GIT_SSH_COMMAND="ssh -i $sshKeyPath"

echo "Web站点路径:$gitPath"

if [ -d "$gitPath/.git" ]; then # 检查项目路径中是否存在 .git 目录
    
    echo ".git 目录已存在,执行 git pull 更新代码..."
    
    cd "$gitPath" || exit
    
    sudo git fetch origin 
    sudo git reset --hard "origin/$branch"
    
    echo "拉取最新更新到本地主干..."
    sudo git pull
    
    echo '设置权限...'
    sudo chown -R www:www .
    
else
    
    echo ".git 目录不存在,从远程仓库克隆代码..."
    mkdir -p "$gitPath"
    cd "$gitPath" || exit
    git clone "$httpGit" .
    echo '设置权限...'
    sudo chown -R www:www .
    if [[ $? != 0 ]]; then
        exit
    fi
    
fi

使用密码

#!/bin/bash

echo "----------------"
# 输出当前时间
date "+%Y-%m-%d %H:%M:%S"
echo "开始执行"

# Git分支名称
branch="main"
# Git项目路径
gitPath="/www/wwwroot/******"
# Git仓库地址
httpGit="https://username:passwd@gitlab.com/******/******.git"

echo "Web站点路径:$gitPath"

if [ -d "$gitPath/.git" ]; then # 检查项目路径中是否存在 .git 目录
    
    echo ".git 目录已存在,执行 git pull 更新代码..."
    
    cd "$gitPath" || exit
    
    sudo git fetch origin 
    sudo git reset --hard "origin/$branch"
    
    echo "拉取最新更新到本地主干..."
    sudo git.pull "$httpGit" "$branch"
    
    echo '设置权限...'
    sudo chown -R www:www .
    
else
    
    echo ".git 目录不存在,从远程仓库克隆代码..."
    mkdir -p "$gitPath"
    cd "$gitPath" || exit
    git clone "$httpGit" .
    echo '设置权限...'
    sudo chown -R www:www .
    if [[ $? != 0 ]]; then
        exit
    fi
    
fi

评论