使用宝塔WebHook自动同步Gitlab提交的代码
一、配置SSH
创建 SSH 密钥
-
打开终端。
-
生成 SSH 密钥: 使用以下命令生成一个新的 SSH 密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa
指定密钥类型为 RSA。-b 4096
指定密钥长度为 4096 位。-C "your_email@example.com"
用于添加注释(通常是你的电子邮件)。
-
按提示操作:
- 系统会询问你保存密钥的位置,默认是
~/.ssh/id_rsa
,你可以直接按 Enter。 - 然后会询问你是否设置密码,可以选择输入密码或直接按 Enter(不设置密码)。
- 系统会询问你保存密钥的位置,默认是
查看 SSH 密钥
-
查看公钥
要查看生成的公钥,你可以使用以下命令:
cat ~/.ssh/id_rsa.pub
这将显示公钥,内容以
ssh-rsa
开头,后面跟着你的邮箱地址。 -
查看私钥
如果需要查看私钥,可以使用:
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¶m=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