You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:Bonobo Windows Git Server的post-receive钩子编写

搞定Bonobo Git服务器的Post-Receive钩子,自动触发Slack通知

嘿,我来帮你搞定这个Bonobo上的钩子配置!我之前折腾过Windows上Git服务器的钩子,知道这里面容易踩路径和权限的坑,直接给你一步步来的方案:

1. 先找对钩子文件的位置

Bonobo的每个仓库都有自己的hooks文件夹,路径大概是:
C:\BonoboGitServer\Repositories\[你的仓库名称]\hooks
你需要在这里创建一个没有扩展名的文件,名字就叫post-receive——Git只会识别这个名字的钩子文件。

2. 编写Post-Receive钩子脚本

因为Bonobo用的是Windows版Git的bash环境来执行钩子,所以脚本要写bash语法,开头的shebang必须指向你安装的Git的bash.exe路径(比如你提到的SmartGit里的Git)。

下面是完整的示例脚本,你可以根据自己的实际路径修改:

#!/bin/bash
# 替换成你实际的Git可执行文件路径(SmartGit里的Git)
GIT_PATH="/c/Program Files (x86)/SmartGit/git/bin/git.exe"
# 替换成你已有的Slack通知Python脚本的绝对路径
PYTHON_SCRIPT="/c/Users/你的用户名/Documents/slack_notify.py"
# 可选:设置编码,避免中文提交消息乱码
export LC_ALL=zh_CN.UTF-8

# 从Git传入的参数中拿到最新提交的哈希值($2是newrev,即推送后的最新commit)
NEW_COMMIT=$2

# 获取最后一次提交的关键信息:提交者姓名|邮箱|提交消息
# %an=提交者姓名,%ae=邮箱,%s=提交主题(消息),用|分隔方便后续拆分
COMMIT_DETAILS=$("$GIT_PATH" log -1 --pretty=format:"%an|%ae|%s" "$NEW_COMMIT")

# 拆分信息为三个独立变量
IFS='|' read -r COMMITTER_NAME COMMITTER_EMAIL COMMIT_MSG <<< "$COMMIT_DETAILS"

# 调用你的Python脚本,把三个参数传进去(和你现有脚本的参数对应)
python "$PYTHON_SCRIPT" "$COMMITTER_NAME" "$COMMITTER_EMAIL" "$COMMIT_MSG"

3. 关键注意事项(避坑指南)

  • 路径一定要用绝对路径:不管是Git、Python脚本还是其他文件,都别用相对路径,bash环境的工作目录可能和你想的不一样。
  • 权限设置:Bonobo运行的用户(一般是IIS应用池用户IIS AppPool\BonoboGitServer)需要有:
    • 读取和执行post-receive文件的权限
    • 访问Git可执行文件的权限
    • 读取和执行你的Python脚本的权限
  • 测试钩子:别等推送再测试!可以手动打开Git Bash,进入钩子所在目录,执行:
    ./post-receive deadbeef123 abc4567 refs/heads/main
    
    这里的deadbeef123abc4567随便填两个合法的哈希前缀,只要能触发脚本就行,看Slack能不能收到消息。
  • 编码问题:如果提交消息有中文,一定要加export LC_ALL=zh_CN.UTF-8,否则bash传递给Python的内容会乱码。

4. 验证推送触发

配置好之后,本地做一次提交推送到Bonobo的origin仓库,检查Slack是否收到了包含提交者信息和提交消息的通知——如果没收到,先看钩子有没有执行,可以在脚本里加一行echo "钩子执行了" >> /c/tmp/hook_log.txt来排查日志。

内容的提问来源于stack exchange,提问作者sniperd

火山引擎 最新活动