Loading

使用宝塔WebHook自动同步Gitlab提交的代码

一、配置SSH

创建 SSH 密钥

  1. 打开终端。

  2. 生成 SSH 密钥: 使用以下命令生成一个新的 SSH 密钥对:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • -t rsa 指定密钥类型为 RSA。
    • -b 4096 指定密钥长度为 4096 位。
    • -C "your_email@example.com" 用于添加注释(通常是你的电子邮件)。
  3. 按提示操作:

    • 系统会询问你保存密钥的位置,默认是 ~/.ssh/id_rsa,你可以直接按 Enter。
    • 然后会询问你是否设置密码,可以选择输入密码或直接按 Enter(不设置密码)。

查看 SSH 密钥

  1. 查看公钥

    要查看生成的公钥,你可以使用以下命令:

    cat ~/.ssh/id_rsa.pub

    这将显示公钥,内容以 ssh-rsa 开头,后面跟着你的邮箱地址。

  2. 查看私钥

    如果需要查看私钥,可以使用:

    cat ~/.ssh/id_rsa

    注意:请勿共享私钥或将其泄露给他人。私钥应该保持私密。

 

GitLab后台填写SSH密钥:

GitLab->个人资料设置->SSH密钥

 

二、配置宝塔WebHook

软件商店 安装 WebHook。添加Hook。

写入脚本:

#!/bin/bash
echo ""
# 输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
 
# git项目路径(这里根据自己的项目路径进行修改)
gitPath="/www/wwwroot/项目路径"
# git网址(这里根据自己的Git地址进行修改)(ssh的地址||http地址)
gitHttp="git@192.168.0.1:service/xxx.git"
echo "Web站点路径:$gitPath"
 
#判断项目路径是否存在
if [ -d "$gitPath" ]; then
        cd $gitPath
        #判断是否存在git目录
        if [ ! -d ".git" ]; then
                echo "在该目录下克隆 git"
                sudo git clone $gitHttp gittemp
                sudo mv gittemp/.git .
                sudo rm -rf gittemp
        fi
        
         # 检查远程分支的最新提交
        latestRemoteCommit=$(git ls-remote origin ft_v1 | awk '{print $gitPath}')
        echo "远程分支最新提交:$latestRemoteCommit"
        
        # 检查当前分支
        currentBranch=$(git rev-parse --abbrev-ref HEAD)
        echo "当前分支:$currentBranch"
        
        # 如果当前不在需要的分支上,则切换分支
        if [ "$currentBranch" != "ft_v1" ]; then
            git checkout ft_v1 || git checkout -b ft_v1 origin/ft_v1
        fi
        
        # 拉取最新的项目文件
        echo "拉取最新的项目文件"
        git fetch --all
        currentLocalCommit=$(git rev-parse HEAD)
        echo "当前本地提交:$currentLocalCommit"
        
        # 检查是否有新的提交需要拉取
        if [ "$currentLocalCommit" != "$latestRemoteCommit" ]; then
            echo "拉取远程分支的最新提交"
            sudo git pull origin ft_v1
        else
            echo "本地已经是最新提交"
        fi
        
        # 输出 Git 状态和日志
        echo "Git 状态:"
        git status
        echo "Git 日志:"
        git log -1 --oneline
        echo "查看当前分支:"
        git branch
        echo "查看远程分支跟踪关系:"
        git branch -vv
    
        echo "拉取结束End"
        exit
else
        echo "该项目路径不存在"
        echo "新建项目目录"
        mkdir $gitPath
        cd $gitPath
        #判断是否存在git目录
        if [ ! -d ".git" ]; then
                echo "在该目录下克隆 git"
                sudo git clone $gitHttp gittemp
                sudo mv gittemp/.git .
                sudo rm -rf gittemp
        fi
        echo "拉取最新的项目文件"
        sudo git reset --hard origin/ft_v1
        sudo git pull
        echo "设置目录权限"
        sudo chown -R www:www $gitPath
        echo "End"
        exit
fi

保存之后,得到WebHook密钥

 复制地址:https://192.168.0.1:123456/hook?access_key=123456789abcdefghijklmnopqrstuvwxyz&param=aaa

在GitLab后台,进入到项目->设置->Web钩子。填写带密钥的地址,私密授权码可省略。

 

添加完之后,可以点击“测试”按钮进行测试。

 

其它

1.代码不同步

  在文件中进入项目,查看有没有.git目录,没有的话,打开终端,拉取一下代码,并切换到提交代码的分支上。

2.同步的不是最新提交的代码

  如果git使用的是http方式拉取的代码,试着切换到SSH地址,并在Gitlab配置ssh密钥。在文件的终端上查看一下当前分支,和WebHook脚本中的分支一致,再测试一下。

  • 更新远程URL为SSH(如果已使用HTTP)
    git remote set-url origin git@github.com:username/repo.git
  • 将现有的本地分支与远程分支关联
    例如,如果你的本地分支是 ft_v1,而远程分支也是 ft_v1,可以这样做:
    git branch --set-upstream-to=origin/ft_v1 ft_v1
posted @ 2024-10-06 17:05  路闻man  阅读(78)  评论(0编辑  收藏  举报